aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorVolker Reichelt <reichelt@igpm.rwth-aachen.de>2006-08-01 23:45:11 +0000
committerVolker Reichelt <reichelt@gcc.gnu.org>2006-08-01 23:45:11 +0000
commit413803d3d8166febfdde1cceb9f81807d429f01e (patch)
tree0eb145643527d321f335c44b085ee5a642fe2c2f /gcc
parentd2b815074b745370cc5ebb541dcf41b52ea8c648 (diff)
downloadgcc-413803d3d8166febfdde1cceb9f81807d429f01e.zip
gcc-413803d3d8166febfdde1cceb9f81807d429f01e.tar.gz
gcc-413803d3d8166febfdde1cceb9f81807d429f01e.tar.bz2
re PR c++/28250 (ICE with invalid catch)
PR c++/28250 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: r115866
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/cgraphunit.c6
-rw-r--r--gcc/testsuite/ChangeLog18
-rw-r--r--gcc/testsuite/g++.dg/eh/catch4.C8
-rw-r--r--gcc/testsuite/g++.dg/inherit/error2.C16
-rw-r--r--gcc/testsuite/g++.dg/other/new1.C14
-rw-r--r--gcc/testsuite/g++.dg/other/qual1.C11
-rw-r--r--gcc/testsuite/g++.dg/warn/pr23075.C5
-rw-r--r--gcc/testsuite/g++.old-deja/g++.brendan/crash52.C3
-rw-r--r--gcc/testsuite/g++.old-deja/g++.jason/report.C4
-rw-r--r--gcc/toplev.c2
11 files changed, 87 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8cf2670..aaba0cc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2006-08-01 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR c++/28250
+ 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-08-01 Stuart Hastings <stuart@apple.com>
* rtl.h (UINTVAL) New.
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index 606cd75..2568502 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -1018,6 +1018,9 @@ cgraph_finalize_compilation_unit (void)
static struct cgraph_node *first_analyzed;
static struct cgraph_varpool_node *first_analyzed_var;
+ if (errorcount || sorrycount)
+ return;
+
finish_aliases_1 ();
if (!flag_unit_at_a_time)
@@ -1466,6 +1469,9 @@ ipa_passes (void)
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 1e1effc..48701d0 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,21 @@
+2006-08-01 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ 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.
+
2006-07-31 Mark Mitchell <mark@codesourcery.com>
PR c++/28523
diff --git a/gcc/testsuite/g++.dg/eh/catch4.C b/gcc/testsuite/g++.dg/eh/catch4.C
new file mode 100644
index 0000000..34cf712
--- /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 0000000..5a7c294
--- /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 0000000..30b6513
--- /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 0000000..bd6f234
--- /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 cc71dea..1521b65 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 95c6a08..9e72fb5 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 77fd7c3..e2d805e 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 f6ff302..55019ed 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -1006,7 +1006,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 ();