------- Comment #4 from jakub at gcc dot gnu dot org 2007-05-29 10:40 ------- When using gcc-3.2.3 as bootstrap compiler, i386.c is miscompiled with -O0 -fkeep-inline-functions (the latter option is what is new in gcc 4.2 and why 4.1.x bootstrap didn't suffer from this, see 2006-07-04 Eric Botcazou <[EMAIL PROTECTED]>
PR bootstrap/18058 * configure.in: Add -fkeep-inline-functions to CFLAGS for stage 1 if the bootstrap compiler is a GCC version that supports it. * configure: Regenerate. ). typedef struct rtx_def *rtx; enum machine_mode { VOIDmode = 0, DImode = 13 }; extern rtx gen_rtx_CONST_INT (enum machine_mode, long); extern rtx gen_x86_shld_1 (rtx, rtx, rtx); static __inline__ rtx gen_x86_64_shld(rtx a, rtx b, rtx c) { return 0; } extern rtx emit_insn (rtx); void foo (rtx *high, rtx *low, enum machine_mode mode, int count) { emit_insn ((mode == DImode ? gen_x86_shld_1 : gen_x86_64_shld) (high[0], low[0], gen_rtx_CONST_INT (VOIDmode, count))); } (extracted from i386.i) is miscompiled (tested latest RHEL3 gcc-3.2.3 as well as current branches/gcc-3_2-branch), it calls gen_x86_64_shld unconditionally. Removing -fkeep-inline-functions (or adding asm volatile ("") into the inline function or making gen_x86_64_shld extern instead of static inline cures this). Now, gcc-3_2-branch is long time closed, so IMNSHO gcc-4.2+ should work around this bug. -- jakub at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu dot org Status|RESOLVED |UNCONFIRMED Resolution|WORKSFORME | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29382