[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