From 0e980a4a58af873ed0ad482fc8b1ef1778c92ca5 Mon Sep 17 00:00:00 2001 From: Kai Tietz Date: Thu, 19 Jan 2012 23:34:29 +0100 Subject: [PATCH] backport: re PR c++/51344 (cc1plus hangs when compiling) Backport from trunk PR c++/51344 * decl2.c (save_template_attributes): Use merge_attributes instead of chaining up via TREE_CHAIN. * g++.dg/torture/pr51344.C: New test. From-SVN: r183315 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/decl2.c | 4 ++-- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/g++.dg/torture/pr51344.C | 9 +++++++++ 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/torture/pr51344.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 473571de0ce5..e1e00f5db4f4 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2012-01-19 Kai Tietz + + PR c++/51344 + * decl2.c (save_template_attributes): Use merge_attributes + instead of chaining up via TREE_CHAIN. + 2012-01-16 Jakub Jelinek PR c++/51854 diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 910360208221..51f23f47c66a 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -1185,9 +1185,9 @@ save_template_attributes (tree *attr_p, tree *decl_p) old_attrs = *q; - /* Place the late attributes at the beginning of the attribute + /* Merge the late attributes at the beginning with the attribute list. */ - TREE_CHAIN (tree_last (late_attrs)) = *q; + late_attrs = merge_attributes (late_attrs, *q); *q = late_attrs; if (!DECL_P (*decl_p) && *decl_p == TYPE_MAIN_VARIANT (*decl_p)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ed5d163766e3..f084c8c74c8a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2012-01-19 Kai Tietz + + * g++.dg/torture/pr51344.C: New test. + 2012-01-19 Tobias Burnus PR fortran/51904 diff --git a/gcc/testsuite/g++.dg/torture/pr51344.C b/gcc/testsuite/g++.dg/torture/pr51344.C new file mode 100644 index 000000000000..482c0fae0651 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr51344.C @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +template +class B +{ + friend __attribute__((cdecl)) A& operator >>(A& a, B& b) + { + return a; + } +}; -- 2.47.2