]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/37530 (ICE with invalid catch)
authorJakub Jelinek <jakub@redhat.com>
Tue, 16 Sep 2008 22:06:28 +0000 (00:06 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 16 Sep 2008 22:06:28 +0000 (00:06 +0200)
PR c++/37530
* gimplify.c (gimplify_expr) <case TRY_CATCH_EXPR>: Don't create
GIMPLE_TRY if cleanup sequence is empty.

* g++.dg/parse/crash48.C: New test.

From-SVN: r140401

gcc/ChangeLog
gcc/gimplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/parse/crash48.C [new file with mode: 0644]

index a419a8fbbaffcff3df26a753412dc2e7af60cc23..d5e0a1c67da31161bfd0dcbf262247cb2d7f2f65 100644 (file)
@@ -1,3 +1,9 @@
+2008-09-16  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/37530
+       * gimplify.c (gimplify_expr) <case TRY_CATCH_EXPR>: Don't create
+       GIMPLE_TRY if cleanup sequence is empty.
+
 2008-09-16  Andrew Pinski  <andrew_pinski@playstation.sony.com>
 
        PR middle-end/37263
index 4f522577e612d2678d190b3ed9ef29551dd54a82..81b21c5fa66f1003cec95ed60c3ce6c47ad8520c 100644 (file)
@@ -6586,6 +6586,13 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
            eval = cleanup = NULL;
            gimplify_and_add (TREE_OPERAND (*expr_p, 0), &eval);
            gimplify_and_add (TREE_OPERAND (*expr_p, 1), &cleanup);
+           /* Don't create bogus GIMPLE_TRY with empty cleanup.  */
+           if (gimple_seq_empty_p (cleanup))
+             {
+               gimple_seq_add_seq (pre_p, eval);
+               ret = GS_ALL_DONE;
+               break;
+             }
            try_ = gimple_build_try (eval, cleanup,
                                     TREE_CODE (*expr_p) == TRY_FINALLY_EXPR
                                     ? GIMPLE_TRY_FINALLY
index eb26941fd0bed675a864fa50f7917dacd383f734..9c414a556f3bbab1d40de7b23620a0b61aff4161 100644 (file)
@@ -1,5 +1,8 @@
 2008-09-16  Jakub Jelinek  <jakub@redhat.com>
 
+       PR c++/37530
+       * g++.dg/parse/crash48.C: New test.
+
        PR c++/37531
        * g++.dg/parse/crash47.C: New test.
 
diff --git a/gcc/testsuite/g++.dg/parse/crash48.C b/gcc/testsuite/g++.dg/parse/crash48.C
new file mode 100644 (file)
index 0000000..4541548
--- /dev/null
@@ -0,0 +1,9 @@
+// PR c++/37530
+// { dg-do compile }
+
+void
+foo (bool b)
+{
+  if (b)
+    try { throw 0; } catch (X) { }     // { dg-error "expected type-specifier before" }
+}