http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58419
Bug ID: 58419 Summary: wrong code at -O3 on x86_64-linux-gnu in 32-bit mode Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: su at cs dot ucdavis.edu The current gcc trunk mis-compiles the following code on x86_64-linux at -O3 in 32-bit mode. This is a regression from 4.8.x. $ gcc-trunk -v Using built-in specs. COLLECT_GCC=gcc-trunk COLLECT_LTO_WRAPPER=/usr/local/gcc-trunk/libexec/gcc/x86_64-unknown-linux-gnu/4.9.0/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: ../gcc-trunk/configure --enable-languages=c,c++,objc,obj-c++,fortran,lto --with-gmp=/usr/local/gcc-trunk --with-mpfr=/usr/local/gcc-trunk --with-mpc=/usr/local/gcc-trunk --with-cloog=/usr/local/gcc-trunk --prefix=/usr/local/gcc-trunk Thread model: posix gcc version 4.9.0 20130913 (experimental) [trunk revision 202556] (GCC) $ gcc-trunk -m32 -O2 small.c $ a.out 0 $ gcc-4.8 -m32 -O3 small.c $ a.out 0 $ gcc-trunk -m64 -O3 small.c $ a.out 0 $ gcc-trunk -m32 -O3 small.c $ a.out Segmentation fault (core dumped) $ ----------------------------------- int printf(const char *, ...); int a, g, i, k, *p; char b, e; short c, h; static short *d = &c; char foo (int p1, int p2) { return p1 - p2; } int bar () { short *q = &c; *q = 1; *p = 0; return 0; } int main () { for (b = -22; b >= -29; b--) { short *l = &h; char *m = &e; *l = a; g = foo (*m = k && *d, 1 > i) || bar (); } printf("0\n"); return 0; }