aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorVolker Reichelt <reichelt@igpm.rwth-aachen.de>2006-04-19 18:07:19 +0000
committerVolker Reichelt <reichelt@gcc.gnu.org>2006-04-19 18:07:19 +0000
commit0014c2479a0e42f96dba222fe391800fa8c57660 (patch)
tree3ebacbeadc17d9edc289f351c2c75786f58723b8 /gcc
parentb815a6316cbd95ebdd3f049627db5932efc9c9b7 (diff)
downloadgcc-0014c2479a0e42f96dba222fe391800fa8c57660.zip
gcc-0014c2479a0e42f96dba222fe391800fa8c57660.tar.gz
gcc-0014c2479a0e42f96dba222fe391800fa8c57660.tar.bz2
re PR c++/26739 (ICE in g++.old-deja/g++.pt/friend36.C)
PR c++/26739 * pt.c (tsubst_friend_function): Return early if pushdecl_namespace_level fails. * g++.old-deja/g++.pt/friend36.C: Adjust error markers. From-SVN: r113090
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/pt.c3
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/friend36.C4
4 files changed, 12 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index aa5b60e..c3df66d 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
2006-04-19 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+ PR c++/26739
+ * pt.c (tsubst_friend_function): Return early if
+ pushdecl_namespace_level fails.
+
PR c++/26036
* typeck.c (convert_arguments): Return error_mark_node instead of
error_mark_list.
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 83bfd12..fbe01db 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -5230,6 +5230,9 @@ tsubst_friend_function (tree decl, tree args)
old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
pop_nested_namespace (ns);
+ if (old_decl == error_mark_node)
+ return error_mark_node;
+
if (old_decl != new_friend)
{
/* This new friend declaration matched an existing
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 0e0367b..381ed85 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2006-04-19 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+ PR c++/26739
+ * g++.old-deja/g++.pt/friend36.C: Adjust error markers.
+
PR c++/26036
* g++.dg/expr/call3.C: New test.
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/friend36.C b/gcc/testsuite/g++.old-deja/g++.pt/friend36.C
index 051803b..f5cb8d4 100644
--- a/gcc/testsuite/g++.old-deja/g++.pt/friend36.C
+++ b/gcc/testsuite/g++.old-deja/g++.pt/friend36.C
@@ -1,12 +1,12 @@
// { dg-do assemble }
template <class T>
-void f(T) {} // { dg-error "" } previously defined here
+void f(T) {} // { dg-error "previously" }
template <class U>
struct S {
template <class T>
- friend void f(T) {} // { dg-error "" } redeclaration
+ friend void f(T) {} // { dg-error "redefinition" }
};
S<int> si;