diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr18903.c | 17 | ||||
-rw-r--r-- | gcc/tree-cfg.c | 4 |
4 files changed, 30 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fad1ef6..6df6bfb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-12-10 Andrew Pinski <pinskia@physics.uc.edu> + + 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 <kazu@cs.umass.edu> * tree-data-ref.c (free_data_refs): Free each data_reference diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 04f3abb..c4d3759 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-12-10 Andrew Pinski <pinskia@physics.uc.edu> + + PR middle-end/18903 + * gcc.c-torture/compile/pr18903.c: New test. + 2004-12-10 Richard Sandiford <rsandifo@redhat.com> * 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 0000000..3c12351 --- /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 db12f98..a7d2441 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 { |