This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[C++ PATCH] Fix alignment handling in build_cplus_array_type/cp_build_qualified_type_real (PR c++/65715)


On Thu, Apr 09, 2015 at 10:51:12AM -0400, Jason Merrill wrote:
> On 04/09/2015 05:38 AM, Jakub Jelinek wrote:
> >Or supposedly no change at all, as the attributes would be either in
> >TYPE_ATTRIBUTES, or on TYPE_DECL, but then it would be covered by
> >the TYPE_NAME comparison.
> 
> Interesting point.  So maybe all we need to do here is copy
> TYPE_ALIGN/TYPE_USER_ALIGN, not change any of the tests.

The following is actually enough to fix this.
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2015-04-09  Jakub Jelinek  <jakub@redhat.com>

	PR c++/65715
	* tree.c (cp_build_qualified_type_real): Also copy
	TYPE_ALIGN and TYPE_USER_ALIGN.

	* c-c++-common/attr-aligned-2.c: New test.

--- gcc/cp/tree.c.jj	2015-04-09 17:05:02.331837692 +0200
+++ gcc/cp/tree.c	2015-04-09 17:15:25.216896052 +0200
@@ -1079,6 +1079,8 @@ cp_build_qualified_type_real (tree type,
 	    {
 	      t = build_variant_type_copy (t);
 	      TYPE_NAME (t) = TYPE_NAME (type);
+	      TYPE_ALIGN (t) = TYPE_ALIGN (type);
+	      TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (type);
 	    }
 	}
 
--- gcc/testsuite/c-c++-common/attr-aligned-2.c.jj	2015-04-09 17:13:26.327792252 +0200
+++ gcc/testsuite/c-c++-common/attr-aligned-2.c	2015-04-09 17:13:57.054300285 +0200
@@ -0,0 +1,18 @@
+/* PR c++/65715 */
+/* { dg-do run } */
+
+typedef double T[4][4] __attribute__((aligned (2 * __alignof__ (double))));
+void foo (const T);
+struct S { T s; };
+
+int
+main ()
+{
+  if (__alignof__ (const T) != 2 * __alignof__ (double))
+    __builtin_abort ();
+  return 0;
+}
+
+#if defined(__cplusplus) && __cplusplus >= 201103L
+static_assert (alignof (const T) == 2 * alignof (double), "alignment of const T");
+#endif


	Jakub


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]