aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2005-02-10 07:55:04 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2005-02-10 07:55:04 +0000
commit6e5bdc64c74f8c08bcba3b78c7a34a9dd0804f3a (patch)
treefbc399be50272a1aa560693806cff14985e9e702 /gcc
parentb2919b93c6006b5528fd63fc85d18ad50f75717a (diff)
downloadgcc-6e5bdc64c74f8c08bcba3b78c7a34a9dd0804f3a.zip
gcc-6e5bdc64c74f8c08bcba3b78c7a34a9dd0804f3a.tar.gz
gcc-6e5bdc64c74f8c08bcba3b78c7a34a9dd0804f3a.tar.bz2
re PR c++/19811 (g++ 4.0: ICE on vector delete of undefined class)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/call.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/init/delete1.C7
4 files changed, 19 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 02b1c0b..4aa0118 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 5d931c8..4655430 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -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
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 210102d..e3fe037 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..698b127
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/delete1.C
@@ -0,0 +1,7 @@
+// PR c++/19811
+
+class C; // { dg-error "forward" }
+
+void foo(void *p) {
+ delete [] ((C*)p) ; // { dg-error "" }
+}