This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/37231] GCC does not compile code with label statements that are followed by a declaration
- From: "alex dot pyattaev at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 9 May 2010 23:29:36 -0000
- Subject: [Bug c/37231] GCC does not compile code with label statements that are followed by a declaration
- References: <bug-37231-16629@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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