[Bug c/37231] GCC does not compile code with label statements that are followed by a declaration
alex dot pyattaev at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sun May 9 23:29:00 GMT 2010
------- Comment #11 from alex dot pyattaev at gmail dot com 2010-05-09 23:29 -------
(In reply to comment #10)
> (In reply to comment #9)
> >
> > A good example of seemingly normal code is following:
> > switch (whatever)
> > {
> > case 1:
> > int i=0;
> > i++;
> > printf("%d",i);
> > break;
> > }
> > It is technically perfectly legal to declare i as a local variable. However,
> > the compiler issues an error. And it is absolutely not clear why "int i=0;" is
> > not a statement. That is probably the only really annoying case. Moving
> > declaration of i into a code block solves the issue. I spent like 10 minutes
> > trying to find out why perfectly legal code would not compile.
> >
>
> Not to beat a dead horse here but...
>
> Because that is *not* perfectly legal C code, and will not be valid C++ code if
> you add another case label after it (jump over initialization)? A declaration
> ("int i") is not a statement.
>
> That fails on both MSVC and gcc. In fact, MSVC will still barf even after
> adding a semicolon after the label to make it a statement. (MSVC error is
> "error 2143: missing ';' before type")
>
Ok, lets have pity for dead horse. Let it be as it is=)
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37231
More information about the Gcc-bugs
mailing list