Commit 45f41865 by Jakub Jelinek Committed by Jakub Jelinek

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
parent 1380aca7
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
......
/* 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:
......
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
......
/* 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);
......
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
......
/* 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];
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment