diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2014-01-30 14:32:25 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2014-01-30 14:32:25 +0000 |
commit | 9ca57929d6193e7445a4ca6a5bbb44834edf84dc (patch) | |
tree | 37407f85991be736888c610604b8114db6e88d69 /gcc | |
parent | e1b317aecf5cc86d1b61ba07c79fcd93a15a47c5 (diff) | |
download | gcc-9ca57929d6193e7445a4ca6a5bbb44834edf84dc.zip gcc-9ca57929d6193e7445a4ca6a5bbb44834edf84dc.tar.gz gcc-9ca57929d6193e7445a4ca6a5bbb44834edf84dc.tar.bz2 |
re PR c++/58843 (ICE with broken destructor call)
/cp
2014-01-30 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/58843
* typeck.c (lookup_destructor): Check dtor_type for error_mark_node.
/testsuite
2014-01-30 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/58843
* g++.dg/lookup/crash8.C: New.
From-SVN: r207305
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/typeck.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lookup/crash8.C | 13 |
4 files changed, 27 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ff696e3..f49e2e5 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,10 @@ 2014-01-30 Paolo Carlini <paolo.carlini@oracle.com> + PR c++/58843 + * typeck.c (lookup_destructor): Check dtor_type for error_mark_node. + +2014-01-30 Paolo Carlini <paolo.carlini@oracle.com> + PR c++/58649 * pt.c (lookup_template_class_1): Check start_enum return value for error_mark_node. diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 6268f7b..b6f4738 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -2486,6 +2486,10 @@ lookup_destructor (tree object, tree scope, tree dtor_name, tree dtor_type = TREE_OPERAND (dtor_name, 0); tree expr; + /* We've already complained about this destructor. */ + if (dtor_type == error_mark_node) + return error_mark_node; + if (scope && !check_dtor_name (scope, dtor_type)) { if (complain & tf_error) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ce37ff1..22a79d4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2014-01-30 Paolo Carlini <paolo.carlini@oracle.com> + PR c++/58843 + * g++.dg/lookup/crash8.C: New. + +2014-01-30 Paolo Carlini <paolo.carlini@oracle.com> + PR c++/58649 * g++.dg/template/crash117.C: New. diff --git a/gcc/testsuite/g++.dg/lookup/crash8.C b/gcc/testsuite/g++.dg/lookup/crash8.C new file mode 100644 index 0000000..7dce9cb --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/crash8.C @@ -0,0 +1,13 @@ +// PR c++/58843 + +struct A {}; + +template<typename T> void foo(T t) +{ + t.T::~X(); // { dg-error "no type" } +} + +void bar() +{ + foo(A()); +} |