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
This commit is contained in:
Jason Merrill 2010-01-04 12:53:37 -05:00 committed by Jason Merrill
parent 4b4a42c40a
commit 282c399b39
4 changed files with 26 additions and 1 deletions

View File

@ -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.

View 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),
(int) ATTR_FLAG_TYPE_IN_PLACE,
/*flags=*/0,
args, complain, in_decl);
/* Preserve a typedef that names a type. */

View File

@ -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.

View File

@ -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);
}