diff options
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/pt.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/crash69.C | 12 |
4 files changed, 24 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6a7a4a4..6e7bd96 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2007-08-16 Paolo Carlini <pcarlini@suse.de> + + PR c++/31132 + * pt.c (tsubst_friend_function): When check_classfn + returns error_mark_node likewise return it. + 2007-08-15 Jakub Jelinek <jakub@redhat.com> PR c++/32992 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index f414bc3..68cd9a5 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -6289,7 +6289,7 @@ tsubst_friend_function (tree decl, tree args) tree fn = check_classfn (context, new_friend, NULL_TREE); - if (fn && fn != error_mark_node) + if (fn) new_friend = fn; } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5126a69..14e58c9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-08-16 Paolo Carlini <pcarlini@suse.de> + + PR c++/31132 + * g++.dg/template/crash69.C: New. + 2007-08-15 Daniel Jacobowitz <dan@codesourcery.com> * lib/target-supports.exp (check_effective_target_arm32): Use diff --git a/gcc/testsuite/g++.dg/template/crash69.C b/gcc/testsuite/g++.dg/template/crash69.C new file mode 100644 index 0000000..957f1e1 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/crash69.C @@ -0,0 +1,12 @@ +// PR c++/31132 + +template<typename T> class A +{ + static int i; // { dg-error "is private" } + friend int T::foo(); // { dg-error "does not match" } +}; + +struct B +{ + void foo() { A<B>::i; } // { dg-error "within|candidate" } +}; |