re PR c++/19811 (g++ 4.0: ICE on vector delete of undefined class)
authorMark Mitchell <mark@codesourcery.com>
Thu, 10 Feb 2005 07:55:04 +0000 (07:55 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Thu, 10 Feb 2005 07:55:04 +0000 (07:55 +0000)
PR c++/19811
* call.c (build_op_delete_call): Check COMPLETE_TYPE_P before
attempting name lookup.

PR c++/19811
* g++.dg/init/delete1.C: New test.

From-SVN: r94799

gcc/cp/ChangeLog
gcc/cp/call.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/init/delete1.C [new file with mode: 0644]

index 02b1c0bc1186a3de3b570eecc72a6714111b3872..4aa0118a62a76309dc305d582aa6eb1f7f81f334 100644 (file)
@@ -1,5 +1,9 @@
 2005-02-09  Mark Mitchell  <mark@codesourcery.com>
 
+       PR c++/19811
+       * call.c (build_op_delete_call): Check COMPLETE_TYPE_P before
+       attempting name lookup.
+
        * parser.c (cp_parser_unqualified_id): Initialize type_decl.
 
        PR c++/19787
index 5d931c8b6e30026f64f7c60829f3c7c362ef0750..4655430a2bd2587fdc7399e118c5546bfa5e1b06 100644 (file)
@@ -3924,7 +3924,9 @@ build_op_delete_call (enum tree_code code, tree addr, tree size,
 
   fnname = ansi_opname (code);
 
-  if (IS_AGGR_TYPE (type) && !global_p)
+  if (CLASS_TYPE_P (type) 
+      && COMPLETE_TYPE_P (complete_type (type))
+      && !global_p)
     /* In [class.free]
 
        If the result of the lookup is ambiguous or inaccessible, or if
index 210102d58969d28ee5fdcd38f31916d5ba06d78a..e3fe0377147ac0548d2689593b8c682dce566ae8 100644 (file)
@@ -1,3 +1,8 @@
+2005-02-09  Mark Mitchell  <mark@codesourcery.com>
+
+       PR c++/19811
+       * g++.dg/init/delete1.C: New test.
+
 2005-02-09  Andrew Pinski  <pinskia@physics.uc.edu>
 
        PR c++/18470
diff --git a/gcc/testsuite/g++.dg/init/delete1.C b/gcc/testsuite/g++.dg/init/delete1.C
new file mode 100644 (file)
index 0000000..698b127
--- /dev/null
@@ -0,0 +1,7 @@
+// PR c++/19811
+
+class C; // { dg-error "forward" }
+
+void foo(void *p) {
+  delete [] ((C*)p) ; // { dg-error "" }
+}