]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/19733 (ICE on invalid destructor call)
authorMark Mitchell <mark@codesourcery.com>
Wed, 9 Feb 2005 02:21:36 +0000 (02:21 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Wed, 9 Feb 2005 02:21:36 +0000 (02:21 +0000)
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

gcc/cp/ChangeLog
gcc/cp/cvt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/parse/crash23.C [new file with mode: 0644]

index 01dc50a5fb263e4b601a0c9a85cdb89d893564bd..bfc7d7a3fc79b2010c6352f2aa8a559c9260097a 100644 (file)
@@ -1,3 +1,9 @@
+2005-02-08  Mark Mitchell  <mark@codesourcery.com>
+
+       PR c++/19733
+       * cvt.c (convert_to_void): Issue errors about pseudo-destructor
+       expressions.
+
 2005-02-01  Alexandre Oliva  <aoliva@redhat.com>
 
        PR c++/18757
index 48be5c5190967152d405f27fe53c78bda9ba2b72..95fce0754f0931c11ac7c67365bbcb0f358ca11a 100644 (file)
@@ -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))
index 11a23843310e9b15618a93b36fb08a6a6025f9e7..7557c9e79dc4c56ab7671793875c826df73dacf1 100644 (file)
@@ -1,3 +1,8 @@
+2005-02-08  Mark Mitchell  <mark@codesourcery.com>
+
+       PR c++/19733
+       * g++.dg/parse/crash23.C: New test.
+
 2005-02-03  Richard Guenther  <rguenth@gcc.gnu.org>
 
        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 (file)
index 0000000..19ad70a
--- /dev/null
@@ -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 "" }
+}
+
+