diff options
author | Paolo Carlini <pcarlini@suse.de> | 2007-08-16 09:05:17 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2007-08-16 09:05:17 +0000 |
commit | 684939cef5c8dee565d3711b720c45c5b6596b8a (patch) | |
tree | 9d4f15c1c05b834e3499da0b28b17620b4fc27ec | |
parent | f0092c54c8dbbaeb8b34c99591b39415ad7e1442 (diff) | |
download | gcc-684939cef5c8dee565d3711b720c45c5b6596b8a.zip gcc-684939cef5c8dee565d3711b720c45c5b6596b8a.tar.gz gcc-684939cef5c8dee565d3711b720c45c5b6596b8a.tar.bz2 |
re PR c++/31132 (ICE on inconsistent friend declaration)
/cp
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.
/testsuite
2007-08-16 Paolo Carlini <pcarlini@suse.de>
PR c++/31132
* g++.dg/template/crash69.C: New.
From-SVN: r127535
-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" } +}; |