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)
Other test cases that fail for the same reason include gcc.dg/pr37106-1.c, gcc.dg/pr43562.c, and gcc.dg/pr43564.c.
m68k needs to define TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE in order to override the instruction scheduling options implied by attribute((optimize(2))).
I'm also hitting this when compiling tar 1.26 with gcc 4.5.2 from Gentoo.
I have fully tested patches to fix this for 4.4.5, 4.5.2, and 4.6.0 (presumably that one will also work for 4.7 but I haven't checked), but I've avoided posting them because the FSF hasn't yet confirmed that my copyright assignment is in place. (They've had the papers for ages.) I just pinged them again. Meanwhile you can just comment out any offending attribute((optimize(...))).
*** Bug 49856 has been marked as a duplicate of this bug. ***
Mikael, can you please publish your “fully tested patches to fix this for 4.4.5, 4.5.2, and 4.6.0” so we can at least include this in the packages? If the FSF itself (i.e. gnulib) starts using those pragmas which cause this ICE, I think we’re going to see more and more popping up; I could convince the maintainer of libvirt to include the m68k workaround in his package (compile with -DWRAPV -fwrapv) but that doesn’t really scale. Without the copyright assignment (WTF is going on there, mine took about three weeks!) it’s still distributable under GPL, just with you as author. Thanks!
Created attachment 24863 [details] fix for gcc-4.5.3 and gcc-4.4.6 A patch for trunk and gcc-4.6.1 has been posted: http://gcc.gnu.org/ml/gcc-patches/2011-07/msg02514.html I'm attaching the corresponding patch for gcc-4.5.3 and gcc-4.4.6 here, in case anyone needs the fix for those branches.
Author: schwab Date: Sun Jul 31 15:00:58 2011 New Revision: 176975 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=176975 Log: Author: Mikael Pettersson <mikpe@it.uu.se> PR target/47908 * gcc/config/m68k/m68k.c (m68k_override_options_after_change): New function. Disable instruction scheduling for non-ColdFire targets. (TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE): Define. Modified: trunk/gcc/ChangeLog trunk/gcc/config/m68k/m68k.c
Author: schwab Date: Sun Jul 31 15:09:25 2011 New Revision: 176976 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=176976 Log: Author: Mikael Pettersson <mikpe@it.uu.se> PR target/47908 * gcc/config/m68k/m68k.c (m68k_override_options_after_change): New function. Disable instruction scheduling for non-ColdFire targets. (TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE): Define. Modified: branches/gcc-4_6-branch/gcc/ChangeLog branches/gcc-4_6-branch/gcc/config/m68k/m68k.c
Thank you for the additional information you have supplied regarding this Bug report. This is an automatically generated reply to let you know your message has been received. Your message is being forwarded to the package maintainers and other interested parties for their attention; they will reply in due course. Your message has been sent to the package maintainer(s): Debian GCC Maintainers <debian-gcc@lists.debian.org> If you wish to submit further information on this problem, please send it to 635919@bugs.debian.org. Please do not send mail to owner@bugs.debian.org unless you wish to report a problem with the Bug-tracking system.
Fixed for 4.6 and trunk.