diff options
author | pinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-10-19 20:52:22 +0000 |
---|---|---|
committer | pinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-10-19 20:52:22 +0000 |
commit | ba6d64900f231fd2013adff9d1dfd1888d6f4540 (patch) | |
tree | 3c9c773e0807fd5561372b295fbea79f2a514c64 /gcc/tree-cfg.c | |
parent | 417266d2c9b28fd66368d486f754454b26ec2d1d (diff) | |
download | gcc-ba6d64900f231fd2013adff9d1dfd1888d6f4540.tar.gz |
2004-10-19 Andrew Pinski <pinskia@physics.uc.edu>
* tree-cfg.c (group_case_labels): Look at the second to last
case statement for combing with the default case.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@89288 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-cfg.c')
-rw-r--r-- | gcc/tree-cfg.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 0722df15ac3..1031f914265 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -948,7 +948,7 @@ group_case_labels (void) Ignore the last element of the label vector because it must be the default case. */ i = 0; - while (i < old_size - 2) + while (i < old_size - 1) { tree base_case, base_label, base_high, type; base_case = TREE_VEC_ELT (labels, i); @@ -969,13 +969,13 @@ group_case_labels (void) type = TREE_TYPE (CASE_LOW (base_case)); base_high = CASE_HIGH (base_case) ? CASE_HIGH (base_case) : CASE_LOW (base_case); - + i++; /* Try to merge case labels. Break out when we reach the end of the label vector or when we cannot merge the next case label with the current one. */ - while (i < old_size - 2) + while (i < old_size - 1) { - tree merge_case = TREE_VEC_ELT (labels, ++i); + tree merge_case = TREE_VEC_ELT (labels, i); tree merge_label = CASE_LABEL (merge_case); tree t = int_const_binop (PLUS_EXPR, base_high, integer_one_node, 1); @@ -990,6 +990,7 @@ group_case_labels (void) CASE_HIGH (base_case) = base_high; TREE_VEC_ELT (labels, i) = NULL_TREE; new_size--; + i++; } else break; |