OSDN Git Service

PR c++/42555
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 4 Jan 2010 17:53:37 +0000 (17:53 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 4 Jan 2010 17:53:37 +0000 (17:53 +0000)
* pt.c (tsubst_decl): Don't apply type attributes in place.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@155628 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ext/attrib35.C [new file with mode: 0644]

index 77dd1df..427e57f 100644 (file)
@@ -1,5 +1,8 @@
 2010-01-04  Jason Merrill  <jason@redhat.com>
 
 2010-01-04  Jason Merrill  <jason@redhat.com>
 
+       PR c++/42555
+       * pt.c (tsubst_decl): Don't apply type attributes in place.
+
        PR c++/42567
        * semantics.c (describable_type): Remove decltype comment and
        semantics.
        PR c++/42567
        * semantics.c (describable_type): Remove decltype comment and
        semantics.
index d5342a1..d2a1f9d 100644 (file)
@@ -9400,7 +9400,7 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
        TREE_CHAIN (r) = NULL_TREE;
 
        apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
        TREE_CHAIN (r) = NULL_TREE;
 
        apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
-                                       (int) ATTR_FLAG_TYPE_IN_PLACE,
+                                       /*flags=*/0,
                                        args, complain, in_decl);
 
        /* Preserve a typedef that names a type.  */
                                        args, complain, in_decl);
 
        /* Preserve a typedef that names a type.  */
index 8d559e9..aebd716 100644 (file)
@@ -1,5 +1,8 @@
 2010-01-04  Jason Merrill  <jason@redhat.com>
 
 2010-01-04  Jason Merrill  <jason@redhat.com>
 
+       PR c++/42555
+       * g++.dg/ext/attrib35.C: New.
+
        PR c++/42567
        * g++.dg/cpp0x/auto17.C: New.
 
        PR c++/42567
        * g++.dg/cpp0x/auto17.C: New.
 
diff --git a/gcc/testsuite/g++.dg/ext/attrib35.C b/gcc/testsuite/g++.dg/ext/attrib35.C
new file mode 100644 (file)
index 0000000..60c4840
--- /dev/null
@@ -0,0 +1,19 @@
+// { dg-do compile { target i*86-*-* x86_64-*-* } }
+// { dg-options "-O3 -msse2" }
+
+// You can make NON-template typedefs with a large alignment.
+typedef double AlignedDoubleType __attribute__((aligned(16)));
+
+template <typename RealType>
+RealType f(const RealType* p)
+{
+  // But if you use a template parameter it complains.
+  typedef RealType AlignedRealType __attribute__((aligned(16)));
+
+  return p[0];
+}
+
+double f2(const double* p)
+{
+  return f<double>(p);
+}