This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: [tree-ssa] Computed gotos
- From: Jamie Lokier <jamie at shareable dot org>
- To: Segher Boessenkool <segher at koffie dot nl>
- Cc: Robert Dewar <dewar at gnat dot com>, paul at nowt dot org, positrone at freemail dot it, aph at redhat dot com, gcc at gcc dot gnu dot org
- Date: Fri, 4 Jul 2003 03:00:29 +0100
- Subject: Re: [tree-ssa] Computed gotos
- References: <20030701030149.F367AF2A64@nile.gnat.com> <3F02EA1A.8050204@koffie.nl>
Segher Boessenkool wrote:
> Robert Dewar wrote:
> >OK, my confusion then sorry. Why on earth is the C version called a
> >computed
> >goto, that sure is a confused terminology, but I guess one that is familiar
> >in the GNU C world. I will take off my Fortran hat :-)
>
> The manual says:
>
> "The analogous feature in Fortran is called an assigned goto,
> but that name seems inappropriate in C, where one can do more
> than simply store label addresses in label variables."
>
> Not that I can see what more that could be (unless undefined
> behaviour is allowed).
Dubious, but works:
#include <stdint.h>
#include <stdio.h>
int main ()
{
uintptr_t label = (uintptr_t) &&label1;
uintptr_t flip = (uintptr_t) &&label1 ^ (uintptr_t) &&label2;
for (int i = 0; i < 10; i++, label ^= flip)
{
goto *(void *) label;
label1:
printf ("red\n");
continue;
label2:
printf ("green\n");
}
return 0;
}