This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c++/16033] New: Spurious "unreachable code at beginning of switch statement"


--- broken_gcc.cc ---
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int preflow[1024];

void relabel(int v) {;}
void push(int a, int b) {;}

void empty(int v) {
 switch(!!preflow[v]) {
  while(preflow[v]) {
   preflow[v]++;
  case 1: printf("%i\n", preflow[v]);
  }
 }
}

int main() {
 preflow[57] = -2;
 empty(57);
}
--- eof ---

The following happens when I compile under various versions of gcc with various 
settings of flags:

tmyklebu@perpugilliam:~$ g++ -v -save-temps -g -Wall -o broken_gcc 
broken_gcc.cc 
Reading specs from /usr/lib/gcc-lib/i386-linux/2.95.4/specs
gcc version 2.95.4 20011002 (Debian prerelease)
 /usr/lib/gcc-lib/i386-linux/2.95.4/cpp0 -lang-c++ -v -D__GNUC__=2 -D__GNUG__=2 
-D__GNUC_MINOR__=95 -D__cplusplus -D__ELF__ -Dunix -D__i386__ -Dlinux -D__ELF__ 
-D__unix__ -D__i386__ -D__linux__ -D__unix -D__linux -Asystem(posix) -D__EXCEPTI
ONS -g -Wall -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ 
broken_gcc.cc broken_gcc.ii
GNU CPP version 2.95.4 20011002 (Debian prerelease) (i386 Linux/ELF)
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc-lib/i386-linux/2.95.4/../../../../include/g++-3
 /usr/local/include
 /usr/lib/gcc-lib/i386-linux/2.95.4/include
 /usr/include
End of search list.
The following default directories have been omitted from the search path:
 /usr/lib/gcc-lib/i386-linux/2.95.4/../../../../i386-linux/include
End of omitted list.
 /usr/lib/gcc-lib/i386-linux/2.95.4/cc1plus broken_gcc.ii -quiet -dumpbase 
broken_gcc.cc -g -Wall -version -o broken_gcc.s
GNU C++ version 2.95.4 20011002 (Debian prerelease) (i386-linux) compiled by 
GNU C version 2.95.4 20011002 (Debian prerelease).
broken_gcc.cc: In function `void empty(int)':
broken_gcc.cc:11: warning: unreachable code at beginning of switch statement
 as -V -Qy -o broken_gcc.o broken_gcc.s
GNU assembler version 2.12.90.0.1 (i386-linux) using BFD version 2.12.90.0.1 
20020307 Debian/GNU Linux
 /usr/lib/gcc-lib/i386-linux/2.95.4/collect2 -m elf_i386 -dynamic-linker /lib/ld
-linux.so.2 -o broken_gcc /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/gcc-lib/i386-
linux/2.95.4/crtbegin.o -L/usr/lib/gcc-lib/i386-linux/2.95.4 broken_gcc.o -lstdc
++ -lm -lgcc -lc -lgcc /usr/lib/gcc-lib/i386-
linux/2.95.4/crtend.o /usr/lib/crtn.o

tmyklebu@glucose-fructose:~$ g++ -v -g -Wall -o broken_gcc broken_gcc.cc
Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.3/specs
Configured with: ../src/configure -v --enable-
languages=c,c++,java,f77,pascal,objc,ada,treelang --prefix=/usr --
mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-
dir=/usr/include/c++/3.3 --enable-shared --with-system-zlib --enable-nls --
without-included-gettext --enable-__cxa_atexit --enable-clocale=gnu --enable-
debug --enable-java-gc=boehm --enable-java-awt=xlib --enable-objc-gc i486-linux
Thread model: posix
gcc version 3.3.3 (Debian 20040422)
 /usr/lib/gcc-lib/i486-linux/3.3.3/cc1plus -quiet -v -D__GNUC__=3 -D__GNUC_MINOR
__=3 -D__GNUC_PATCHLEVEL__=3 -D_GNU_SOURCE broken_gcc.cc -D__GNUG__=3 -quiet -
dumpbase broken_gcc.cc -auxbase broken_gcc -g -Wall -version -o /tmp/ccWxoHWb.s
GNU C++ version 3.3.3 (Debian 20040422) (i486-linux)
        compiled by GNU C version 3.3.3 (Debian 20040422).
GGC heuristics: --param ggc-min-expand=64 --param ggc-min-heapsize=64424
ignoring nonexistent directory "/usr/i486-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/3.3
 /usr/include/c++/3.3/i486-linux
 /usr/include/c++/3.3/backward
 /usr/local/include
 /usr/lib/gcc-lib/i486-linux/3.3.3/include
 /usr/include
End of search list.
broken_gcc.cc: In function `void empty(int)':
broken_gcc.cc:11: warning: unreachable code at beginning of switch statement
 as -V -Qy -o /tmp/cc6py1Hq.o /tmp/ccWxoHWb.s
GNU assembler version 2.14.90.0.7 (i386-linux) using BFD version 2.14.90.0.7 
20031029 Debian GNU/Linux
 /usr/lib/gcc-lib/i486-linux/3.3.3/collect2 --eh-frame-hdr -m elf_i386 -dynamic-
linker /lib/ld-linux.so.2 -o broken_gcc /usr/lib/gcc-lib/i486-linux/3.3.3/../../
../crt1.o /usr/lib/gcc-lib/i486-linux/3.3.3/../../../crti.o /usr/lib/gcc-lib/i48
6-linux/3.3.3/crtbegin.o -L/usr/lib/gcc-lib/i486-linux/3.3.3 -L/usr/lib/gcc-lib/
i486-linux/3.3.3/../../.. /tmp/cc6py1Hq.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s
 -lgcc /usr/lib/gcc-lib/i486-linux/3.3.3/crtend.o /usr/lib/gcc-lib/i486-
linux/3.3.3/../../../crtn.o

tmyklebu@glucose-fructose:~$ g++ -v -g -Wall -O3 -o broken_gcc broken_gcc.cc
Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.3/specs
Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,pascal,ob
jc,ada,treelang --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info 
--with-gxx-include-dir=/usr/include/c++/3.3 --enable-shared --with-system-zlib -
-enable-nls --without-included-gettext --enable-__cxa_atexit --enable-clocale=gn
u --enable-debug --enable-java-gc=boehm --enable-java-awt=xlib --enable-objc-gc 
i486-linux
Thread model: posix
gcc version 3.3.3 (Debian 20040422)
 /usr/lib/gcc-lib/i486-linux/3.3.3/cc1plus -quiet -v -D__GNUC__=3 -D__GNUC_MINOR
__=3 -D__GNUC_PATCHLEVEL__=3 -D_GNU_SOURCE broken_gcc.cc -D__GNUG__=3 -quiet -du
mpbase broken_gcc.cc -auxbase broken_gcc -g -O3 -Wall -version -
o /tmp/cc4NrePv.s
GNU C++ version 3.3.3 (Debian 20040422) (i486-linux)
        compiled by GNU C version 3.3.3 (Debian 20040422).
GGC heuristics: --param ggc-min-expand=64 --param ggc-min-heapsize=64424
ignoring nonexistent directory "/usr/i486-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/3.3
 /usr/include/c++/3.3/i486-linux
 /usr/include/c++/3.3/backward
 /usr/local/include
 /usr/lib/gcc-lib/i486-linux/3.3.3/include
 /usr/include
End of search list.
broken_gcc.cc: In function `void empty(int)':
broken_gcc.cc:12: warning: unreachable code at beginning of switch statement
broken_gcc.cc: In function `int main()':
broken_gcc.cc:12: warning: unreachable code at beginning of switch statement
 as -V -Qy -o /tmp/cc8u0nyg.o /tmp/cc4NrePv.s
GNU assembler version 2.14.90.0.7 (i386-linux) using BFD version 2.14.90.0.7 
20031029 Debian GNU/Linux
 /usr/lib/gcc-lib/i486-linux/3.3.3/collect2 --eh-frame-hdr -m elf_i386 -dynamic-
linker /lib/ld-linux.so.2 -o broken_gcc /usr/lib/gcc-lib/i486-linux/3.3.3/../../
../crt1.o /usr/lib/gcc-lib/i486-linux/3.3.3/../../../crti.o /usr/lib/gcc-lib/i48
6-linux/3.3.3/crtbegin.o -L/usr/lib/gcc-lib/i486-linux/3.3.3 -L/usr/lib/gcc-lib/
i486-linux/3.3.3/../../.. /tmp/cc8u0nyg.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s
 -lgcc /usr/lib/gcc-lib/i486-linux/3.3.3/crtend.o /usr/lib/gcc-lib/i486-
linux/3.3.3/../../../crtn.o

Note the warnings about unreachable code at the beginning of a switch 
statement.  The code ic clearly reachable (and reached!), as I begin a while 
loop there which executes a few times.  Turning on optimisation on 2.95.4 shuts 
the compiler up; turning off optimisation and debugging on 3.3.3 also shuts the 
compiler up.

-- 
           Summary: Spurious "unreachable code at beginning of switch
                    statement"
           Product: gcc
           Version: 3.3.3
            Status: UNCONFIRMED
          Severity: minor
          Priority: P2
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: tmyklebu at csclub dot uwaterloo dot ca
                CC: gcc-bugs at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16033


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]