diff options
author | Mark Mitchell <mark@codesourcery.com> | 2005-02-10 07:55:04 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2005-02-10 07:55:04 +0000 |
commit | 6e5bdc64c74f8c08bcba3b78c7a34a9dd0804f3a (patch) | |
tree | fbc399be50272a1aa560693806cff14985e9e702 /gcc | |
parent | b2919b93c6006b5528fd63fc85d18ad50f75717a (diff) | |
download | gcc-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/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/call.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/delete1.C | 7 |
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 "" } +} |