diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-01-23 15:39:43 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-01-23 15:39:43 +0100 |
commit | d0f2db231639f73802c07f03cf4a77125a0daeb7 (patch) | |
tree | 0b7b021ab86da9f22550c1365c406ea8440c67b6 | |
parent | ef192ae1b63da0d71d0fb881d26b27db35fa2920 (diff) | |
download | gcc-d0f2db231639f73802c07f03cf4a77125a0daeb7.zip gcc-d0f2db231639f73802c07f03cf4a77125a0daeb7.tar.gz gcc-d0f2db231639f73802c07f03cf4a77125a0daeb7.tar.bz2 |
re PR c++/88984 (ICE in genericize_switch_stmt, at cp/cp-gimplify.c:377)
PR c++/88984
* cp-gimplify.c (genericize_switch_stmt): Move cond genericization
before the begin_bc_block call.
* c-c++-common/pr88984.c: New test.
From-SVN: r268187
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/cp-gimplify.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/pr88984.c | 19 |
4 files changed, 34 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 20a5471..363dff1 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2019-01-23 Jakub Jelinek <jakub@redhat.com> + + PR c++/88984 + * cp-gimplify.c (genericize_switch_stmt): Move cond genericization + before the begin_bc_block call. + 2019-01-21 Jason Merrill <jason@redhat.com> PR c++/87893 - constexpr ctor ICE on ARM. diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c index 121dfa4..e476b8f 100644 --- a/gcc/cp/cp-gimplify.c +++ b/gcc/cp/cp-gimplify.c @@ -356,16 +356,17 @@ genericize_switch_stmt (tree *stmt_p, int *walk_subtrees, void *data) tree break_block, body, cond, type; location_t stmt_locus = EXPR_LOCATION (stmt); - break_block = begin_bc_block (bc_break, stmt_locus); - body = SWITCH_STMT_BODY (stmt); if (!body) body = build_empty_stmt (stmt_locus); cond = SWITCH_STMT_COND (stmt); type = SWITCH_STMT_TYPE (stmt); - cp_walk_tree (&body, cp_genericize_r, data, NULL); cp_walk_tree (&cond, cp_genericize_r, data, NULL); + + break_block = begin_bc_block (bc_break, stmt_locus); + + cp_walk_tree (&body, cp_genericize_r, data, NULL); cp_walk_tree (&type, cp_genericize_r, data, NULL); *walk_subtrees = 0; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d91be29..c6006e0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-01-23 Jakub Jelinek <jakub@redhat.com> + + PR c++/88984 + * c-c++-common/pr88984.c: New test. + 2019-01-23 Richard Biener <rguenther@suse.de> PR tree-optimization/89008 diff --git a/gcc/testsuite/c-c++-common/pr88984.c b/gcc/testsuite/c-c++-common/pr88984.c new file mode 100644 index 0000000..48c6220 --- /dev/null +++ b/gcc/testsuite/c-c++-common/pr88984.c @@ -0,0 +1,19 @@ +/* PR c++/88984 */ +/* { dg-do run } */ + +void +foo (int x, int y) +{ + while (x > 0) + switch (({ if (y) break; y; })) + { + case 2: x = 0; + } +} + +int +main () +{ + foo (1, 1); + return 0; +} |