From: Andrew Pinski Date: Fri, 10 Dec 2004 19:32:14 +0000 (+0000) Subject: re PR middle-end/18903 (ice in bsi_after_labels) X-Git-Tag: releases/gcc-4.0.0~2257 X-Git-Url: https://gcc.gnu.org/git/?a=commitdiff_plain;h=ef0b4f287a17c1c9543e835b8dca60adaf916a6f;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fad1ef66a9ec..6df6bfbab00f 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 04f3abb62ac3..c4d3759bae2e 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 000000000000..3c123511297c --- /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 db12f98929d1..a7d24410169b 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 {