re PR c/52181 (merge_decls doesn't handle DECL_USER_ALIGN properly)
PR c/52181 * c-decl.c (merge_decls): Copy DECL_USER_ALIGN bit from olddecl to newdecl. * decl.c (duplicate_decls): If olddecl has bigger DECL_ALIGN than newdecl, copy DECL_ALIGN to newdecl and or DECL_USER_ALIGN bits. * c-c++-common/pr52181.c: New test. From-SVN: r184193
This commit is contained in:
parent
1380aca7e6
commit
45f41865ff
6 changed files with 39 additions and 3 deletions
|
@ -1,3 +1,9 @@
|
|||
2012-02-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/52181
|
||||
* c-decl.c (merge_decls): Copy DECL_USER_ALIGN bit from olddecl to
|
||||
newdecl.
|
||||
|
||||
2012-02-13 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR bootstrap/52172
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Process declarations and variables for C compiler.
|
||||
Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
|
||||
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
|
||||
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
@ -2449,6 +2449,7 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
|
|||
memcpy ((char *) olddecl + sizeof (struct tree_common),
|
||||
(char *) newdecl + sizeof (struct tree_common),
|
||||
sizeof (struct tree_decl_common) - sizeof (struct tree_common));
|
||||
DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
|
||||
switch (TREE_CODE (olddecl))
|
||||
{
|
||||
case FUNCTION_DECL:
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2012-02-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/52181
|
||||
* decl.c (duplicate_decls): If olddecl has bigger DECL_ALIGN than
|
||||
newdecl, copy DECL_ALIGN to newdecl and or DECL_USER_ALIGN bits.
|
||||
|
||||
2012-02-07 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/51675
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Process declarations and variables for C++ compiler.
|
||||
Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
|
||||
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
|
||||
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Michael Tiemann (tiemann@cygnus.com)
|
||||
|
||||
|
@ -2214,7 +2214,12 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
|
|||
SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
|
||||
DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
|
||||
}
|
||||
/* Likewise for DECL_USER_ALIGN and DECL_PACKED. */
|
||||
/* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED. */
|
||||
if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
|
||||
{
|
||||
DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
|
||||
DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
|
||||
}
|
||||
DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
|
||||
if (TREE_CODE (newdecl) == FIELD_DECL)
|
||||
DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2012-02-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/52181
|
||||
* c-c++-common/pr52181.c: New test.
|
||||
|
||||
2012-02-13 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/52215
|
||||
|
|
13
gcc/testsuite/c-c++-common/pr52181.c
Normal file
13
gcc/testsuite/c-c++-common/pr52181.c
Normal file
|
@ -0,0 +1,13 @@
|
|||
/* PR c/52181 */
|
||||
/* { dg-do compile } */
|
||||
|
||||
extern const int v1[];
|
||||
const int __attribute__((aligned(16))) v1[] = { 1 };
|
||||
extern const int __attribute__((aligned(16))) v2[];
|
||||
const int v2[] = { 1 };
|
||||
extern const int __attribute__((aligned(16))) v3[];
|
||||
const int __attribute__((aligned(16))) v3[] = { 1 };
|
||||
const int __attribute__((aligned(16))) v4[] = { 1 };
|
||||
int test[(__alignof__ (v4) != __alignof__ (v1) /* { dg-bogus "is negative" } */
|
||||
|| __alignof__ (v4) != __alignof__ (v2)
|
||||
|| __alignof__ (v4) != __alignof__ (v3)) ? -1 : 0];
|
Loading…
Add table
Reference in a new issue