Goto skipping declarations

Jonathan M Davis newsgroup.d at jmdavisprog.com
Fri May 3 20:46:16 UTC 2024


On Friday, May 3, 2024 2:38:31 PM MDT Jonathan M Davis via Digitalmars-d-learn 
wrote:
> On Friday, May 3, 2024 1:15:16 PM MDT Ben Jones via Digitalmars-d-learn 
wrote:
> > In general, you can't skip a declaration with goto, but it seems
> > to be allowed if the declaration you're skipping is labelled...
> > Is that expected or an accepts invalid bug?
> >
> > https://godbolt.org/z/4qx8Pf6G7
> >
> > ```d
> > void f1(){ //fails with error about skipping a declaration
> >
> >      int x;
> >      goto Label;
> >      int y;
> >      Label:
> >      int z;
> >
> > }
> >
> > void f2(){ //compiles fine
> >
> >      int x;
> >      goto Label;
> >      Dummy:
> >      int y;
> >      Label:
> >      int z;
> >
> > }
> > ```
>
> It has to be a bug, and taking it a step further shows that. If you print
> out y, you'll get a seemingly random number. E.G. On the first run, I got
>
> 554440803
>
> and on the second I got
>
> 549310547
>
> Presumably, it's a garbage value from whatever happened to be on the stack.
>
> I'm quite sure that the spec doesn't have anything about being allowed to
> skip a declaration just because it has a label on it (honestly, if we _did_
> want that to be the case, the spec would probably be missing it, since it
> tends to fall on the side of having too few details rather than too many),
> but even if it did, the code is clearly doing something that should not be
> happening with initialization without explicitly using = void. So,
> _something_ here would nee to be fixed.
>
> In any case, I expect that the compiler is just going dumb here because of
> the label for some reason, and one or more of the checks that it's supposed
> to be doing is being missed.

Here. I reported it:

https://issues.dlang.org/show_bug.cgi?id=24534

- Jonathan M Davis





More information about the Digitalmars-d-learn mailing list