From ef0b4f287a17c1c9543e835b8dca60adaf916a6f Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Fri, 10 Dec 2004 19:32:14 +0000 Subject: [PATCH] re PR middle-end/18903 (ice in bsi_after_labels) 2004-12-10 Andrew Pinski PR middle-end/18903 * gcc.c-torture/compile/pr18903.c: New test. 2004-12-10 Andrew Pinski PR middle-end/18903 * tree-cfg.c (remove_bb): Put the moved label at the beginning of the basic block. From-SVN: r92006 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.c-torture/compile/pr18903.c | 17 +++++++++++++++++ gcc/tree-cfg.c | 4 ++-- 4 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr18903.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fad1ef66a9e..6df6bfbab00 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-12-10 Andrew Pinski + + PR middle-end/18903 + * tree-cfg.c (remove_bb): Put the moved label at the beginning + of the basic block. + 2004-12-10 Kazu Hirata * tree-data-ref.c (free_data_refs): Free each data_reference diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 04f3abb62ac..c4d3759bae2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-12-10 Andrew Pinski + + PR middle-end/18903 + * gcc.c-torture/compile/pr18903.c: New test. + 2004-12-10 Richard Sandiford * gcc.c-torture/execute/20041210-1.c: New test. diff --git a/gcc/testsuite/gcc.c-torture/compile/pr18903.c b/gcc/testsuite/gcc.c-torture/compile/pr18903.c new file mode 100644 index 00000000000..3c123511297 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr18903.c @@ -0,0 +1,17 @@ +/* We were ICEing in bsi_after_labels because + we had a BB which did not have a lablel. + PR middle-end/18903 */ + +#ifndef NO_LABEL_VALUES +void g (int s, int f) +{ + &&ff; + s = f; + ff: + goto end; + f = s; + end:; +} +#else +int g; +#endif diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index db12f98929d..a7d24410169 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -2003,10 +2003,10 @@ remove_bb (basic_block bb) && FORCED_LABEL (LABEL_EXPR_LABEL (stmt))) { basic_block new_bb = bb->prev_bb; - block_stmt_iterator new_bsi = bsi_after_labels (new_bb); + block_stmt_iterator new_bsi = bsi_start (new_bb); bsi_remove (&i); - bsi_insert_after (&new_bsi, stmt, BSI_NEW_STMT); + bsi_insert_before (&new_bsi, stmt, BSI_NEW_STMT); } else { -- 2.30.2