aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorGiovanni Bajo <giovannibajo@gcc.gnu.org>2005-02-18 19:11:58 +0000
committerAndrew Pinski <pinskia@gcc.gnu.org>2005-02-18 11:11:58 -0800
commitaecc0cf071f98308306003f76458fe47ecebc3c9 (patch)
treec9e53c3d1b5552f20cf65784987f33ce34aad1bd /gcc
parent2155b88625b5a282858fbefce23c785cbbd58927 (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/decl2.c11
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/ext/attrib20.C23
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;
+