Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!enother.net!enother.net!peer03.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!border1.nntp.dca1.giganews.com!border2.nntp.dca1.giganews.com!nntp.giganews.com!news.iecc.com!.POSTED!nerds-end From: anton@mips.complang.tuwien.ac.at (Anton Ertl) Newsgroups: comp.compilers Subject: Re: How to type braces for computed gotos (was: Best "simple" C Compiler I've ever seen) Date: Mon, 21 Jul 2014 11:45:41 GMT Organization: Institut fuer Computersprachen, Technische Universitaet Wien Lines: 32 Sender: news@iecc.com Approved: comp.compilers@iecc.com Message-ID: <14-07-048@comp.compilers> References: <14-05-013@comp.compilers> <14-07-033@comp.compilers> NNTP-Posting-Host: news.iecc.com X-Trace: miucha.iecc.com 1405951841 15445 2001:470:1f07:1126:0:676f:7373:6970 (21 Jul 2014 14:10:41 GMT) X-Complaints-To: abuse@iecc.com NNTP-Posting-Date: Mon, 21 Jul 2014 14:10:41 +0000 (UTC) Keywords: C, Fortran, history Posted-Date: 21 Jul 2014 10:10:41 EDT X-submission-address: compilers@iecc.com X-moderator-address: compilers-request@iecc.com X-FAQ-and-archives: http://compilers.iecc.com X-Received-Bytes: 2744 X-Received-Body-CRC: 3343372233 Xref: csiph.com comp.compilers:1338 federation2005@netzero.com writes: >There is one feature the compiler tests for that I assume the language also >has in it that I haven't seen much of before: the computed goto. What's I >don't quite understand how the branches are being typed. A computed goto >inside a void routine has the branches typed (void *), with the individual >items accessed in effect as references to (void *). > >The branches are essentially continuations. So the question here is how are >continuations being typed. From the example used in the distribution, either >(A) all continuations are typed (void *) or they are being typed (T *) when >they occur inside a function that returns type T. I guess this compiler implements the labels-as-values extension of GNU C (aka "computed goto", but see the Fortran note below). The type of a label is always void *; static typing fans might prefer a separate label type (or a whole type system for labels), but I guess that the intersection between static typing fans and the users of this extension is very small. I have used labels-as-values extensively and I have not produced errors stemming from confusion between labels and other occurences of void *. BTW, in Fortran this feature is called "assigned goto", and it uses integer variables (i.e., not a special type, either) for storing the labels (and therefore needs a separate syntax "assign 50 to l" instead of just writing "l=50"). Fortran also has a feature called "computed goto", but that is closer to a C switch than a GNU C "goto *". - anton -- M. Anton Ertl anton@mips.complang.tuwien.ac.at http://www.complang.tuwien.ac.at/anton/