Bug 45112 - [4.5 regression] Aligned attribute on static class member definition ignored
Summary: [4.5 regression] Aligned attribute on static class member definition ignored
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 4.5.0
: P3 normal
Target Milestone: 4.5.2
Assignee: Ulrich Weigand
URL:
Keywords: wrong-code
Depends on:
Blocks:
 
Reported: 2010-07-28 18:24 UTC by Ulrich Weigand
Modified: 2010-07-31 15:48 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2010-07-28 21:47:11


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ulrich Weigand 2010-07-28 18:24:18 UTC
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 ...
Comment 1 Ulrich Weigand 2010-07-28 21:47:11 UTC
Proposed fix posted here:
http://gcc.gnu.org/ml/gcc-patches/2010-07/msg02223.html
Comment 2 Ulrich Weigand 2010-07-30 15:50:00 UTC
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

Comment 3 Ulrich Weigand 2010-07-30 16:19:38 UTC
Fixed in mainline.  Will check in to 4.5 after 4.5.1 release.
Comment 4 Ulrich Weigand 2010-07-31 15:46:31 UTC
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

Comment 5 Ulrich Weigand 2010-07-31 15:48:00 UTC
Fixed in 4.5 branch (for 4.5.2) as well.
Comment 6 Ulrich Weigand 2010-07-31 17:43:01 UTC
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

Comment 7 Ulrich Weigand 2010-07-31 17:44:09 UTC
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