[Bug c/37231] GCC does not compile code with label statements that are followed by a declaration
dougsemler at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sun May 9 23:25:00 GMT 2010
------- Comment #10 from dougsemler at gmail dot com 2010-05-09 23:25 -------
(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")
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37231
More information about the Gcc-bugs
mailing list