The following is miscompiled at -O3. extern void abort (void); struct Foo { char a : 1; char b : 7; }; struct Foo x[256]; int y[256]; void __attribute__((noinline,noclone)) bar (int n) { int i; for (i = 0; i < n; ++i) { x[i].a = 0; y[i] = 3; } } int main() { x[5].b = 7; bar (256); if (x[5].b != 7) abort (); return 0; }
4.5 works.
Author: rguenth Date: Tue May 29 14:40:16 2012 New Revision: 187961 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=187961 Log: 2012-05-29 Richard Guenther <rguenther@suse.de> PR tree-optimization/53516 * tree-data-ref.c (stmt_with_adjacent_zero_store_dr_p): Reject bitfield accesses. * tree-vect-data-refs.c (vect_analyze_data_refs): Likewise. * gcc.dg/torture/pr53516.c: New testcase. Added: trunk/gcc/testsuite/gcc.dg/torture/pr53516.c Modified: trunk/gcc/ChangeLog trunk/gcc/testsuite/ChangeLog trunk/gcc/tree-data-ref.c trunk/gcc/tree-vect-data-refs.c
Author: rguenth Date: Tue May 29 14:44:08 2012 New Revision: 187964 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=187964 Log: 2012-05-29 Richard Guenther <rguenther@suse.de> PR tree-optimization/53516 * tree-data-ref.c (stmt_with_adjacent_zero_store_dr_p): Reject bitfield accesses. * tree-vect-data-refs.c (vect_analyze_data_refs): Likewise. * gcc.dg/torture/pr53516.c: New testcase. Added: branches/gcc-4_7-branch/gcc/testsuite/gcc.dg/torture/pr53516.c Modified: branches/gcc-4_7-branch/gcc/ChangeLog branches/gcc-4_7-branch/gcc/testsuite/ChangeLog branches/gcc-4_7-branch/gcc/tree-data-ref.c branches/gcc-4_7-branch/gcc/tree-vect-data-refs.c
Fixed on the trunk and the 4.7 branch for now.
The 4.6 branch has been closed, fixed in GCC 4.7.1.