/* Origin: Mikael Pettersson <[EMAIL PROTECTED]> and the Linux kernel. */
extern void abort (void); unsigned long a = 0xc0000000, b = 0xd0000000; unsigned long c = 0xc01bb958, d = 0xc0264000; unsigned long e = 0xc0288000, f = 0xc02d4378; void foo (int x, int y, int z) { if (x != 245 || y != 36 || z != 444) abort (); } int main (void) { unsigned long g; int h = 0, i = 0, j = 0; for (g = a; g < b; g += 0x1000) if (g < c) h++; else if (g >= d && g < e) j++; else if (g < f) i++; foo (i, j, h); return 0; } is miscompiled on ppc at -O{1,2,3,s} -m32. Works with -O0 or -m64 at any optimization level. -- Summary: Miscompilation of mem_init in 32-bit ppc linux kernel Product: gcc Version: 4.0.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: target AssignedTo: jakub at gcc dot gnu dot org ReportedBy: jakub at gcc dot gnu dot org CC: gcc-bugs at gcc dot gnu dot org GCC target triplet: powerpc64-redhat-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20196