c/8828: gcc reports some code is unreachable when it is not
Rolf Campbell
rcampbell@tropicnetworks.com
Fri Dec 6 08:26:00 GMT 2002
The following reply was made to PR c/8828; it has been noted by GNATS.
From: "Rolf Campbell" <rcampbell@tropicnetworks.com>
To: "Christian Ehrhardt" <ehrhardt@mathematik.uni-ulm.de>,
<reichelt@igpm.rwth-aachen.de>,
<gcc-bugs@gcc.gnu.org>,
<gcc-prs@gcc.gnu.org>,
<nobody@gcc.gnu.org>,
<gcc-gnats@gcc.gnu.org>
Cc:
Subject: RE: c/8828: gcc reports some code is unreachable when it is not
Date: Fri, 6 Dec 2002 11:22:32 -0500
But, this was compiled WITHOUT optimizations (gcc -Wunreachable-code -c
a.c), so there should be no removal of superfluous code, or folding of
break statements.
-Rolf
> -----Original Message-----
> From: Christian Ehrhardt [mailto:ehrhardt@mathematik.uni-ulm.de]=20
> Sent: Friday, December 06, 2002 11:14 AM
> To: reichelt@igpm.rwth-aachen.de; gcc-bugs@gcc.gnu.org;=20
> gcc-prs@gcc.gnu.org; nobody@gcc.gnu.org; Rolf Campbell;=20
> gcc-gnats@gcc.gnu.org
> Subject: Re: c/8828: gcc reports some code is unreachable=20
> when it is not
>=20
>=20
> On Fri, Dec 06, 2002 at 09:29:12AM -0000,=20
> reichelt@igpm.rwth-aachen.de wrote:
> > An even shorter example is the following:
> > =20
> > -----------------snip here----------------
> > void foo(int i)
> > {
> > switch(i) {
> > case 0:
> > break;
> > case 1:
> > break;
> > }
> > }
> > -----------------snip here----------------
> > =20
> > Compiling this with gcc 3.2.1 or mainline I get the message
> > =20
> > PR8828.c: In function `foo':
> > PR8828.c:7: warning: will never be executed
> > PR8828.c:5: warning: will never be executed
>=20
> Looks like warnings removed by the optimizer. In this case=20
> the optimizer will just remove both of the empty case labels=20
> and warn that the instructions therein (the breaks) aren't=20
> executed. In the original example the break is probably=20
> folded into the for loop an then optimized away. I even=20
> managed to get warnings for code like
> this:
>=20
> switch (i) {
> case 0:
> x++;
> break;
> case 1:
> x++;
> break;
> }
>=20
> where the optimizer tells me that it removed one of the x++=20
> instructions probably because the two case labels were=20
> combined. This is probably not a bug, the documentation=20
> doesn't explicitly mention optimizations but it does mention=20
> that inlined function may produce warning for code that is=20
> unreachable only in a single inlined copy. This case looks=20
> rather similar.
>=20
> regards Christian
>=20
> --=20
> THAT'S ALL FOLKS!
>=20
More information about the Gcc-prs
mailing list