Building the following testcase fails with G++ 4.5 and later. G++ 4.4 works fine. struct JSString { unsigned char mLength; static JSString unitStringTable[]; }; JSString JSString::unitStringTable[] __attribute__ ((aligned (8))) = { 1 }; int bug [__alignof__ (JSString::unitStringTable) >= 8 ? 1 : -1]; The test case is reduced from Mozilla, where the bug sometimes causes the JavaScript interpreter to crash. See also: https://bugzilla.mozilla.org/show_bug.cgi?id=582593 The problem appears to be that cp-decl.c:duplicate_decls fails to merge the DECL_USER_ALIGN flag from the definition into the declaration. This bug was introduced by the following patch: http://gcc.gnu.org/ml/gcc-patches/2009-06/msg00763.html Before that patch, the DECL_USER_ALIGN flag was part of a block copied in whole via memcpy by duplicate_decls. The patch moved that flag to another location outside that block, so it is no longer copied ...
Proposed fix posted here: http://gcc.gnu.org/ml/gcc-patches/2010-07/msg02223.html
Subject: Bug 45112 Author: uweigand Date: Fri Jul 30 15:49:34 2010 New Revision: 162716 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=162716 Log: gcc/ PR c++/45112 * cp/decl.c (duplicate_decls): Merge DECL_USER_ALIGN and DECL_PACKED. gcc/testsuite/ PR c++/45112 * testsuite/g++.dg/pr45112.C: New test. Added: trunk/gcc/testsuite/g++.dg/pr45112.C Modified: trunk/gcc/ChangeLog trunk/gcc/cp/decl.c trunk/gcc/testsuite/ChangeLog
Fixed in mainline. Will check in to 4.5 after 4.5.1 release.
Subject: Bug 45112 Author: uweigand Date: Sat Jul 31 15:46:15 2010 New Revision: 162783 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=162783 Log: gcc/ PR c++/45112 * cp/decl.c (duplicate_decls): Merge DECL_USER_ALIGN and DECL_PACKED. gcc/testsuite/ PR c++/45112 * testsuite/g++.dg/pr45112.C: New test. Added: branches/gcc-4_5-branch/gcc/testsuite/g++.dg/pr45112.C Modified: branches/gcc-4_5-branch/gcc/ChangeLog branches/gcc-4_5-branch/gcc/cp/decl.c branches/gcc-4_5-branch/gcc/testsuite/ChangeLog
Fixed in 4.5 branch (for 4.5.2) as well.
Subject: Bug 45112 Author: uweigand Date: Sat Jul 31 17:42:48 2010 New Revision: 162785 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=162785 Log: Move PR c++/45112 ChangeLog entry to correct location. Modified: trunk/gcc/ChangeLog trunk/gcc/cp/ChangeLog
Subject: Bug 45112 Author: uweigand Date: Sat Jul 31 17:43:59 2010 New Revision: 162786 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=162786 Log: Move PR c++/45112 ChangeLog entry to correct location. Modified: branches/gcc-4_5-branch/gcc/ChangeLog branches/gcc-4_5-branch/gcc/cp/ChangeLog