From: Jakub Jelinek Date: Mon, 8 Jun 2009 17:02:17 +0000 (+0200) Subject: re PR c++/40373 (ICE with invalid destructor call) X-Git-Tag: releases/gcc-4.3.4~140 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=09fa86feb40c7aefcbbcb812d6e063a5a7204674;p=thirdparty%2Fgcc.git re PR c++/40373 (ICE with invalid destructor call) PR c++/40373 * call.c (check_dtor_name): Return false even if get_type_value (name) is error_mark_node. * g++.dg/template/dtor7.C: New test. From-SVN: r148284 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b5d7a52e574e..f78375e123d8 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2009-06-08 Jakub Jelinek + + PR c++/40373 + * call.c (check_dtor_name): Return false even if + get_type_value (name) is error_mark_node. + 2009-06-04 Richard Guenther Backport from mainline diff --git a/gcc/cp/call.c b/gcc/cp/call.c index fb2420f2a596..d180111c66bf 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -234,7 +234,7 @@ check_dtor_name (tree basetype, tree name) return false; } - if (!name) + if (!name || name == error_mark_node) return false; return same_type_p (TYPE_MAIN_VARIANT (basetype), TYPE_MAIN_VARIANT (name)); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 540110f71171..3c0a7af86c07 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-06-08 Jakub Jelinek + + PR c++/40373 + * g++.dg/template/dtor7.C: New test. + 2009-06-07 H.J. Lu Backport from mainline: diff --git a/gcc/testsuite/g++.dg/template/dtor7.C b/gcc/testsuite/g++.dg/template/dtor7.C new file mode 100644 index 000000000000..0dac69e8948c --- /dev/null +++ b/gcc/testsuite/g++.dg/template/dtor7.C @@ -0,0 +1,24 @@ +// PR c++/40373 +// { dg-compile } + +struct A; // { dg-bogus "candidates are" "" { xfail *-*-* } } +namespace +{ + struct A; // { dg-bogus "struct" "" { xfail *-*-* } } +} + +struct B {}; + +template void +foo (T t) +{ + t.~A (); // { dg-error "does not match destructor name" } +} + +void +bar () +{ + foo (B ()); // { dg-bogus "instantiated from here" "" { xfail *-*-* } } +} + +// { dg-bogus "is ambiguous" "" { xfail *-*-* } 15 }