[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