diff options
author | Steven Bosscher <stevenb@suse.de> | 2004-06-07 06:11:59 +0000 |
---|---|---|
committer | Steven Bosscher <steven@gcc.gnu.org> | 2004-06-07 06:11:59 +0000 |
commit | 7853504d63ff5c13c0f64e09d4515ea0ce67ffb8 (patch) | |
tree | ffcaaa52d99303ea10df08fad4ec5f0bc88b971d /gcc | |
parent | e4638a72d8b900cc9557bdeaf719a3e3987cd4c6 (diff) | |
download | gcc-7853504d63ff5c13c0f64e09d4515ea0ce67ffb8.zip gcc-7853504d63ff5c13c0f64e09d4515ea0ce67ffb8.tar.gz gcc-7853504d63ff5c13c0f64e09d4515ea0ce67ffb8.tar.bz2 |
tree-cfg.c (tree_verify_flow_info): Make sure that labels in SWITCH_LABELS are always sorted.
* tree-cfg.c (tree_verify_flow_info): Make sure that labels in
SWITCH_LABELS are always sorted.
From-SVN: r82683
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/tree-cfg.c | 29 |
2 files changed, 34 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7198e85..2a65c9f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2004-06-06 Steven Bosscher <stevenb@suse.de> + * tree-cfg.c (tree_verify_flow_info): Make sure that labels in + SWITCH_LABELS are always sorted. + +2004-06-06 Steven Bosscher <stevenb@suse.de> + * hooks.c (hook_int_void_1): New generic hook. * hooks.h (hook_int_void_1): Add prototype. * config/c4x/c4x.c (TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE): diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index d6823cb..65e8e89ab 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -3631,6 +3631,7 @@ tree_verify_flow_info (void) case SWITCH_EXPR: { + tree prev; edge e; size_t i, n; tree vec; @@ -3649,6 +3650,34 @@ tree_verify_flow_info (void) label_bb->aux = (void *)1; } + /* Verify that the case labels are sorted. */ + prev = TREE_VEC_ELT (vec, 0); + for (i = 1; i < n - 1; ++i) + { + tree c = TREE_VEC_ELT (vec, i); + if (! CASE_LOW (c)) + { + error ("Found default case not at end of case vector"); + err = 1; + continue; + } + if (! tree_int_cst_lt (CASE_LOW (prev), CASE_LOW (c))) + { + error ("Case labels not sorted:\n "); + print_generic_expr (stderr, prev, 0); + fprintf (stderr," is greater than "); + print_generic_expr (stderr, c, 0); + fprintf (stderr," but comes before it.\n"); + err = 1; + } + prev = c; + } + if (CASE_LOW (TREE_VEC_ELT (vec, n - 1))) + { + error ("No default case found at end of case vector"); + err = 1; + } + for (e = bb->succ; e; e = e->succ_next) { if (!e->dest->aux) |