From: Volker Reichelt Date: Thu, 3 Aug 2006 11:35:52 +0000 (+0000) Subject: re PR c++/28257 (ICE with invalid variable declaration) X-Git-Tag: releases/gcc-4.0.4~475 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=50717f93c150ee1b4498ef4937de10d1fd2321ef;p=thirdparty%2Fgcc.git re PR c++/28257 (ICE with invalid variable declaration) PR c++/28257 PR c++/28259 PR c++/28267 * toplev.c (compile_file): Return early on errorcount or sorrycount. * cgraphunit.c (cgraph_finalize_compilation_unit): Likewise. (cgraph_optimize): Likewise. PR c++/28250 * g++.dg/eh/catch4.C: New test. PR c++/28257 * g++.dg/other/qual1.C: New test. PR c++/28259 * g++.dg/inherit/error2.C: New test. PR c++/28267 * g++.dg/other/new1.C: New test. * g++.dg/warn/pr23075.C: Remove obsolete test. * g++.old-deja/g++.brendan/crash52.C: Remove dg-warning marker. * g++.old-deja/g++.jason/report.C: Remove dg-warning marker. From-SVN: r115901 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4878692eb389..3a45fd0efb22 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2006-08-03 Volker Reichelt + + PR c++/28257 + PR c++/28259 + PR c++/28267 + * toplev.c (compile_file): Return early on errorcount or sorrycount. + * cgraphunit.c (cgraph_finalize_compilation_unit): Likewise. + (cgraph_optimize): Likewise. + 2006-07-30 Roger Sayle PR middle-end/28473 diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index a491d7823193..c0fd68d12735 100644 --- a/gcc/cgraphunit.c +++ b/gcc/cgraphunit.c @@ -682,6 +682,9 @@ cgraph_finalize_compilation_unit (void) { struct cgraph_node *node; + if (errorcount || sorrycount) + return; + finish_aliases_1 (); if (!flag_unit_at_a_time) @@ -1764,6 +1767,9 @@ cgraph_preserve_function_body_p (tree decl) void cgraph_optimize (void) { + if (errorcount || sorrycount) + return; + #ifdef ENABLE_CHECKING verify_cgraph (); #endif diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e342f4590180..71755d9e6506 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,21 @@ 2006-08-03 Volker Reichelt + PR c++/28250 + * g++.dg/eh/catch4.C: New test. + + PR c++/28257 + * g++.dg/other/qual1.C: New test. + + PR c++/28259 + * g++.dg/inherit/error2.C: New test. + + PR c++/28267 + * g++.dg/other/new1.C: New test. + + * g++.dg/warn/pr23075.C: Remove obsolete test. + * g++.old-deja/g++.brendan/crash52.C: Remove dg-warning marker. + * g++.old-deja/g++.jason/report.C: Remove dg-warning marker. + PR c++/27508 * g++.dg/parse/dtor9.C: New test. * g++.dg/parse/dtor10.C: New test. diff --git a/gcc/testsuite/g++.dg/eh/catch4.C b/gcc/testsuite/g++.dg/eh/catch4.C new file mode 100644 index 000000000000..34cf712125f1 --- /dev/null +++ b/gcc/testsuite/g++.dg/eh/catch4.C @@ -0,0 +1,8 @@ +// PR c++/28250 +// { dg-do compile } + +void foo() +{ + try { throw; } + catch () {} // { dg-error "type-specifier" } +} diff --git a/gcc/testsuite/g++.dg/inherit/error2.C b/gcc/testsuite/g++.dg/inherit/error2.C new file mode 100644 index 000000000000..5a7c2940d272 --- /dev/null +++ b/gcc/testsuite/g++.dg/inherit/error2.C @@ -0,0 +1,16 @@ +// PR c++/28259 +// { dg-do compile } + +struct A +{ + virtual A* foo(); +}; + +struct B : virtual A; // { dg-error "before" } + +struct C : A +{ + virtual B* foo(); +}; + +B* C::foo() { return 0; } diff --git a/gcc/testsuite/g++.dg/other/new1.C b/gcc/testsuite/g++.dg/other/new1.C new file mode 100644 index 000000000000..30b651326aa3 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/new1.C @@ -0,0 +1,14 @@ +// PR c++/28267 +// { dg-do compile } + +struct A +{ + A(); + void* operator new(__SIZE_TYPE__, int = X); // { dg-error "not declared" } + void operator delete(void*, int); +}; + +void foo() +{ + new A; +} diff --git a/gcc/testsuite/g++.dg/other/qual1.C b/gcc/testsuite/g++.dg/other/qual1.C new file mode 100644 index 000000000000..bd6f234931c9 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/qual1.C @@ -0,0 +1,11 @@ +// PR c++/28257 +// { dg-do compile } + +struct A +{ + int i; + void foo() + { + int A::i = i; // { dg-error "extra qualification|not a static member" } + } +}; diff --git a/gcc/testsuite/g++.dg/warn/pr23075.C b/gcc/testsuite/g++.dg/warn/pr23075.C index cc71deada53d..1521b658139c 100644 --- a/gcc/testsuite/g++.dg/warn/pr23075.C +++ b/gcc/testsuite/g++.dg/warn/pr23075.C @@ -7,8 +7,3 @@ foo (void) { return; // { dg-error "with no value" } } // { dg-bogus "control reaches end" } - -int -bar (void) -{ -} // { dg-warning "control reaches end" } diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash52.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash52.C index 95c6a08322e7..9e72fb5cbb03 100644 --- a/gcc/testsuite/g++.old-deja/g++.brendan/crash52.C +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash52.C @@ -10,5 +10,4 @@ public: A &f(A &a) {// { dg-error "" } new decl.* std::cout << "Blah\n"; -} // { dg-warning "" } no return - +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/report.C b/gcc/testsuite/g++.old-deja/g++.jason/report.C index c1b9a57bbb0b..7a0ea751fdda 100644 --- a/gcc/testsuite/g++.old-deja/g++.jason/report.C +++ b/gcc/testsuite/g++.old-deja/g++.jason/report.C @@ -56,7 +56,7 @@ bar2 baz (X::Y y) // { dg-error "" } in this context bar2 wa [5]; wa[0] = baz(f); undef2 (1); // { dg-error "" } implicit declaration -} // { dg-warning "" } no return +} int ninny () { @@ -71,4 +71,4 @@ int ninny () int darg (char X::*p) { undef3 (1); // { dg-error "" } implicit declaration -} // { dg-warning "" } no return +} diff --git a/gcc/toplev.c b/gcc/toplev.c index d2d2e752cdfb..362db01091b4 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -1017,7 +1017,7 @@ compile_file (void) what's left of the symbol table output. */ timevar_pop (TV_PARSE); - if (flag_syntax_only) + if (flag_syntax_only || errorcount || sorrycount) return; lang_hooks.decls.final_write_globals ();