From: Mark Mitchell Date: Wed, 9 Feb 2005 02:21:36 +0000 (+0000) Subject: re PR c++/19733 (ICE on invalid destructor call) X-Git-Tag: releases/gcc-3.4.4~242 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ac3db034f662aec8d20f3856a1598a4e79206e33;p=thirdparty%2Fgcc.git re PR c++/19733 (ICE on invalid destructor call) PR c++/19733 * cvt.c (convert_to_void): Issue errors about pseudo-destructor expressions. PR c++/19733 * g++.dg/parse/crash23.C: New test. From-SVN: r94758 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 01dc50a5fb26..bfc7d7a3fc79 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2005-02-08 Mark Mitchell + + PR c++/19733 + * cvt.c (convert_to_void): Issue errors about pseudo-destructor + expressions. + 2005-02-01 Alexandre Oliva PR c++/18757 diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index 48be5c519096..95fce0754f09 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -793,6 +793,11 @@ convert_to_void (tree expr, const char *implicit) return expr; if (invalid_nonstatic_memfn_p (expr)) return error_mark_node; + if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR) + { + error ("pseudo-destructor is not called"); + return error_mark_node; + } if (VOID_TYPE_P (TREE_TYPE (expr))) return expr; switch (TREE_CODE (expr)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 11a23843310e..7557c9e79dc4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-02-08 Mark Mitchell + + PR c++/19733 + * g++.dg/parse/crash23.C: New test. + 2005-02-03 Richard Guenther PR middle-end/19775 diff --git a/gcc/testsuite/g++.dg/parse/crash23.C b/gcc/testsuite/g++.dg/parse/crash23.C new file mode 100644 index 000000000000..19ad70a64547 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/crash23.C @@ -0,0 +1,12 @@ +// PR c++/19733 + +struct A {}; +typedef int I; +void foo() { + A().~A; // { dg-error "" } + A().A::~A; // { dg-error "" } + (int().I::~I, 3); // { dg-error "" } + int().I::~I; // { dg-error "" } +} + +