diff options
author | Jakub Jelinek <jakub@redhat.com> | 2008-09-17 00:06:28 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2008-09-17 00:06:28 +0200 |
commit | cc8b343d265200a3bd9fa1eccfa2db35499cb5c7 (patch) | |
tree | 876ce5c7a63823800eed11d44476606577a8b06b | |
parent | 326a4d4ef1c3b80f4cfbf17f52a42c263abb25df (diff) | |
download | gcc-cc8b343d265200a3bd9fa1eccfa2db35499cb5c7.zip gcc-cc8b343d265200a3bd9fa1eccfa2db35499cb5c7.tar.gz gcc-cc8b343d265200a3bd9fa1eccfa2db35499cb5c7.tar.bz2 |
re PR c++/37530 (ICE with invalid catch)
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
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/gimplify.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/crash48.C | 9 |
4 files changed, 25 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a419a8f..d5e0a1c6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 4f52257..81b21c5 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index eb26941f..9c414a5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 0000000..4541548 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/crash48.C @@ -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" } +} |