http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47908
Summary: attribute((optimize(2))) causes ICE in
m68k_sched_issue_rate
Product: gcc
Version: 4.6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
AssignedTo: [email protected]
ReportedBy: [email protected]
When targeting m68k-linux, if a function declaration has
__attribute__((__optimize__(2))), then gcc ICEs in m68k_sched_issue_rate:
> cat O16384.c
__attribute__((__optimize__(2))) void foo (void) { }
> objdir/gcc/xgcc -Bobjdir/gcc -S O16384.c
O16384.c: In function 'foo':
O16384.c:1:1: internal compiler error: in m68k_sched_issue_rate, at
config/m68k/m68k.c:6055
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
The immediate cause is that m68k_sched_cpu indicates a non-ColdFire target, and
m68k_sched_issue_rate explicitly calls gcc_unreachable in that case. I don't
know why attribute((optimize(2))) causes scheduling to be attempted, esp. since
m68k_option_override seems to disable a number of scheduling-related flags.
This bug causes gcc.dg/O16384.c to fail with gcc-4.4.5/4.5.2/4.6.0 on
m68k-linux. With gcc-4.3.5 the optimize attribute is ignored and there is no
ICE.
> objdir/gcc/xgcc -v
Using built-in specs.
COLLECT_GCC=objdir/gcc/xgcc
Target: m68k-unknown-linux
Configured with: /tmp/gcc-4.6-20110219/configure --target=m68k-unknown-linux
--prefix=/home/mikpe/pkgs/linux-x86/cross-m68k
--with-gmp=/home/mikpe/pkgs/linux-x86/gmp-4.3.2
--with-mpfr=/home/mikpe/pkgs/linux-x86/mpfr-2.4.2
--with-mpc=/home/mikpe/pkgs/linux-x86/mpc-0.8.2 --disable-plugin --disable-lto
--disable-nls --enable-shared --disable-libmudflap --disable-multilib
--enable-threads=posix --enable-checking=release --enable-languages=c
Thread model: posix
gcc version 4.6.0 20110219 (experimental) (GCC)