http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56809
Bug #: 56809 Summary: Revision 197266 causes trunk ICE for arm-none-eabi targets Classification: Unclassified Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: critical Priority: P3 Component: c AssignedTo: unassig...@gcc.gnu.org ReportedBy: terry....@arm.com After build a tool chain from trunk@r197266 for arm-none-eabi, then use it to compile a simple case with switch statement, I got below ICE: terguo01@terry-pc01:bad$ ../../install-native/bin/arm-none-eabi-gcc -O2 -S test.c test.c: In function 'foo': test.c:29:1: internal compiler error: in thumb2_output_casesi, at config/arm/arm.c:25830 } ^ 0x87f9da3 thumb2_output_casesi(rtx_def**) /work/terguo01/build-toolchain/latest/src/gcc/gcc/config/arm/arm.c:25830 0x83265d6 final_scan_insn(rtx_def*, _IO_FILE*, int, int, int*) /work/terguo01/build-toolchain/latest/src/gcc/gcc/final.c:2854 0x83271c5 final(rtx_def*, _IO_FILE*, int) /work/terguo01/build-toolchain/latest/src/gcc/gcc/final.c:1958 0x832740a rest_of_handle_final /work/terguo01/build-toolchain/latest/src/gcc/gcc/final.c:4333 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <http://gcc.gnu.org/bugs.html> for instructions. It seems r197266 made some changes to jump table which then causes such error. Here are the full configure options of my GCC: terguo01@terry-pc01:bad$ ../../install-native/bin/arm-none-eabi-gcc -v Using built-in specs. COLLECT_GCC=../../install-native/bin/arm-none-eabi-gcc COLLECT_LTO_WRAPPER=/work/terguo01/build-toolchain/latest/install-native/lib/gcc/arm-none-eabi/4.9.0/lto-wrapper Target: arm-none-eabi Configured with: /work/terguo01/build-toolchain/latest/src/gcc/configure --target=arm-none-eabi --prefix=/work/terguo01/build-toolchain/latest/install-native --libexecdir=/work/terguo01/build-toolchain/latest/install-native/lib --infodir=/work/terguo01/build-toolchain/latest/install-native/share/doc/gcc-arm-none-eabi/info --mandir=/work/terguo01/build-toolchain/latest/install-native/share/doc/gcc-arm-none-eabi/man --htmldir=/work/terguo01/build-toolchain/latest/install-native/share/doc/gcc-arm-none-eabi/html --pdfdir=/work/terguo01/build-toolchain/latest/install-native/share/doc/gcc-arm-none-eabi/pdf --enable-languages=c --disable-decimal-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-tls --with-newlib --without-headers --with-gnu-as --with-gnu-ld --with-python-dir=share/gcc-arm-none-eabi --with-sysroot=/work/terguo01/build-toolchain/latest/install-native/arm-none-eabi --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-pkgversion='GNU Tools for ARM Embedded Processors' --disable-multilib --with-mode=thumb --with-cpu=cortex-m4 Thread model: single gcc version 4.9.0 20130330 (experimental) (GNU Tools for ARM Embedded Processors) Among them, the important ones are "--target=arm-none-eabi --disable-multilib --with-mode=thumb --with-cpu=cortex-m4". Here is my test case: terguo01@terry-pc01:bad$ cat test.c int foo (int mode, int i) { int x; switch (mode) { case 0: x = i + 1; break; case 1: x = i / 2; break; case 2: x = i * 3; break; case 3: x = i + 3; break; case 4: x = i + 5; break; default: x = i - 1; } return x; }