aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2016-01-31 06:52:48 -0500
committerJason Merrill <jason@gcc.gnu.org>2016-01-31 06:52:48 -0500
commitb676a0798f55af50365f0cee6351ac7c959bf3d8 (patch)
treebc47f3d1b0561371ed1ea34ce420f6454be2f5ca
parent0c221916d67f27c903415581260d9d975d2b3578 (diff)
downloadgcc-b676a0798f55af50365f0cee6351ac7c959bf3d8.zip
gcc-b676a0798f55af50365f0cee6351ac7c959bf3d8.tar.gz
gcc-b676a0798f55af50365f0cee6351ac7c959bf3d8.tar.bz2
Fix abi-tag17.C.
* pt.c (lookup_template_class_1): Don't share TYPE_ATTRIBUTES between template and instantiation. From-SVN: r233017
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/pt.c6
-rw-r--r--gcc/testsuite/g++.dg/abi/abi-tag17.C9
3 files changed, 15 insertions, 5 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 3b5c9d5..b956104 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2016-01-31 Jason Merrill <jason@redhat.com>
+
+ * pt.c (lookup_template_class_1): Don't share TYPE_ATTRIBUTES
+ between template and instantiation.
+
2016-01-29 Jakub Jelinek <jakub@redhat.com>
PR debug/66869
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 186a5d2..0d0e664 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -8482,11 +8482,7 @@ lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
tree attributes
= lookup_attribute (tags[ix], TYPE_ATTRIBUTES (template_type));
- if (!attributes)
- ;
- else if (!TREE_CHAIN (attributes) && !TYPE_ATTRIBUTES (t))
- TYPE_ATTRIBUTES (t) = attributes;
- else
+ if (attributes)
TYPE_ATTRIBUTES (t)
= tree_cons (TREE_PURPOSE (attributes),
TREE_VALUE (attributes),
diff --git a/gcc/testsuite/g++.dg/abi/abi-tag17.C b/gcc/testsuite/g++.dg/abi/abi-tag17.C
new file mode 100644
index 0000000..cb7dbab
--- /dev/null
+++ b/gcc/testsuite/g++.dg/abi/abi-tag17.C
@@ -0,0 +1,9 @@
+// { dg-final { scan-assembler "_Z3fi1B6_X_tagv" } }
+
+struct __attribute((abi_tag("_A1_tag"))) A1 {};
+template <class T> struct __attribute((abi_tag("_X_tag"))) X {};
+X<int> fi1();
+int main() {
+ X<A1> xa;
+ fi1();
+}