diff options
author | Giovanni Bajo <giovannibajo@gcc.gnu.org> | 2005-02-18 19:11:58 +0000 |
---|---|---|
committer | Andrew Pinski <pinskia@gcc.gnu.org> | 2005-02-18 11:11:58 -0800 |
commit | aecc0cf071f98308306003f76458fe47ecebc3c9 (patch) | |
tree | c9e53c3d1b5552f20cf65784987f33ce34aad1bd | |
parent | 2155b88625b5a282858fbefce23c785cbbd58927 (diff) | |
download | gcc-aecc0cf071f98308306003f76458fe47ecebc3c9.zip gcc-aecc0cf071f98308306003f76458fe47ecebc3c9.tar.gz gcc-aecc0cf071f98308306003f76458fe47ecebc3c9.tar.bz2 |
re PR c++/19508 (dwarf2, ICE on __attribute__(aligned) in class template)
2005-01-20 Giovanni Bajo <giovannibajo@gcc.gnu.org>
PR c++/19508
* g++.dg/ext/attrib20.C: New test.
2005-01-20 Giovanni Bajo <giovannibajo@gcc.gnu.org>
PR c++/19508
* decl2.c (grokfield): Do not apply attributes to template parameters
as they are ignored by tsubst anyway.
From-SVN: r95230
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/decl2.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/attrib20.C | 23 |
4 files changed, 44 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 61cd670..ab452e9 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2005-01-20 Giovanni Bajo <giovannibajo@gcc.gnu.org> + + PR c++/19508 + * decl2.c (grokfield): Do not apply attributes to template parameters + as they are ignored by tsubst anyway. + 2005-02-18 Jakub Jelinek <jakub@redhat.com> PR c++/19813 diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index c7b0415..113386a 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -878,7 +878,16 @@ grokfield (const cp_declarator *declarator, value = push_template_decl (value); if (attrlist) - cplus_decl_attributes (&value, attrlist, 0); + { + /* Avoid storing attributes in template parameters: + tsubst is not ready to handle them. */ + tree type = TREE_TYPE (value); + if (TREE_CODE (type) == TEMPLATE_TYPE_PARM + || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM) + sorry ("applying attributes to template parameters is not implemented"); + else + cplus_decl_attributes (&value, attrlist, 0); + } return value; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 581e21a..5eb642ec 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-01-20 Giovanni Bajo <giovannibajo@gcc.gnu.org> + + PR c++/19508 + * g++.dg/ext/attrib20.C: New test. + 2004-02-18 Andrew Pinski <pinskia@physics.uc.edu> PR middle-end/20030 diff --git a/gcc/testsuite/g++.dg/ext/attrib20.C b/gcc/testsuite/g++.dg/ext/attrib20.C new file mode 100644 index 0000000..e46e8ae --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/attrib20.C @@ -0,0 +1,23 @@ +// { dg-do compile } +// { dg-options "-g" } +// Origin: <jan at etpmod dot phys dot tue dot nl> +// PR c++/19508: avoid attributes for template parameters + +template <typename T> +struct BVector +{ + typedef T T2; + typedef T value_type __attribute__ ((aligned(8))); // { dg-bogus "attribute" "attribute" { xfail *-*-* } } + typedef T2 value_type2 __attribute__ ((aligned(8))); // { dg-bogus "attribute" "attribute" { xfail *-*-* } } + value_type v; +}; +BVector<int> m; + +template <template <class> class T> +struct BV2 +{ + typedef T<float> value_type __attribute__((aligned(8))); // { dg-bogus "attribute" "attribute" { xfail *-*-* } } + value_type v; +}; +BV2<BVector> m2; + |