From 282c399b39bc92f5f3765a96bf13025873370e77 Mon Sep 17 00:00:00 2001 From: Jason Merrill <jason@redhat.com> Date: Mon, 4 Jan 2010 12:53:37 -0500 Subject: [PATCH] re PR c++/42555 (16-byte aligned double is disallowed only in templates) PR c++/42555 * pt.c (tsubst_decl): Don't apply type attributes in place. From-SVN: r155628 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/pt.c | 2 +- gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/ext/attrib35.C | 19 +++++++++++++++++++ 4 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/ext/attrib35.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 77dd1df69540..427e57f4f0fb 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 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. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index d5342a1653fd..d2a1f9d6e2e5 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -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), - (int) ATTR_FLAG_TYPE_IN_PLACE, + /*flags=*/0, args, complain, in_decl); /* Preserve a typedef that names a type. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8d559e91c3b2..aebd716b189a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 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. diff --git a/gcc/testsuite/g++.dg/ext/attrib35.C b/gcc/testsuite/g++.dg/ext/attrib35.C new file mode 100644 index 000000000000..60c48403e25b --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/attrib35.C @@ -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); +} -- GitLab