http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60017
Bug ID: 60017 Summary: Struct not returned correctly Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: ishiura-compiler at ml dot kwansei.ac.jp GCC 4.9.0 for x86_64 miscompiles the following code. $ cat error.c struct S0 { short m0; short m1; }; struct S1 { unsigned m0 : 1; char m1[2][2]; struct S0 m2[2]; }; struct S1 x = {1,{{1,1},{1,1}},{{1,1},{1,1}}}; struct S1 func(void) { return x; } int main(void) { struct S1 ret = func(); if( ret.m2[1].m1 != 1 ) { __builtin_abort(); } return 0; } $ gcc-4.9 error.c $ ./a.out Abort trap: 6 The value of ret.m2[1].m1 was 32767 instead of 1. There was no problem with an i686 target. $ gcc-4.9 -v Using built-in specs. COLLECT_GCC=gcc-4.9 COLLECT_LTO_WRAPPER=/usr/local/Cellar/gcc49/4.9-20140126/gcc/libexec/gcc/x86_64-apple-darwin13.0.0/4.9.0/lto-wrapper Target: x86_64-apple-darwin13.0.0 Configured with: ../configure --build=x86_64-apple-darwin13.0.0 --prefix=/usr/local/Cellar/gcc49/4.9-20140126/gcc --datarootdir=/usr/local/Cellar/gcc49/4.9-20140126/share --bindir=/usr/local/Cellar/gcc49/4.9-20140126/bin --enable-languages=c --program-suffix=-4.9 --with-gmp=/usr/local/opt/gmp --with-mpfr=/usr/local/opt/mpfr --with-mpc=/usr/local/opt/libmpc --with-cloog=/usr/local/opt/cloog --with-isl=/usr/local/opt/isl --with-system-zlib --enable-libstdcxx-time=yes --enable-stage1-checking --enable-checking=release --enable-plugin --enable-lto --disable-werror --disable-nls --disable-multilib --with-native-system-header-dir=/usr/include --with-sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk Thread model: posix gcc version 4.9.0 20140126 (experimental) (GCC)