diff options
author | Kazu Hirata <kazu@cs.umass.edu> | 2004-10-24 00:46:10 +0000 |
---|---|---|
committer | Kazu Hirata <kazu@gcc.gnu.org> | 2004-10-24 00:46:10 +0000 |
commit | 4e0148df67360c0e2f2dd99d71ebcd3f55d84bf3 (patch) | |
tree | b4831a3070cafc945a02d7cdf160b0fccc235c29 /gcc/stmt.c | |
parent | 545b6261a4895964fef608bd8e44ec1c30cfd96b (diff) | |
download | gcc-4e0148df67360c0e2f2dd99d71ebcd3f55d84bf3.zip gcc-4e0148df67360c0e2f2dd99d71ebcd3f55d84bf3.tar.gz gcc-4e0148df67360c0e2f2dd99d71ebcd3f55d84bf3.tar.bz2 |
stmt.c (expand_case): Handle the default label outside of the for loop.
* stmt.c (expand_case): Handle the default label outside of
the for loop. Remove code to handle a missing default label.
From-SVN: r89502
Diffstat (limited to 'gcc/stmt.c')
-rw-r--r-- | gcc/stmt.c | 37 |
1 files changed, 15 insertions, 22 deletions
@@ -2341,7 +2341,7 @@ expand_case (tree exp) struct case_node *case_list = 0; /* Label to jump to if no case matches. */ - tree default_label_decl = 0; + tree default_label_decl; /* The switch body is lowered in gimplify.c, we should never have switches with a non-NULL SWITCH_BODY here. */ @@ -2353,20 +2353,21 @@ expand_case (tree exp) /* An ERROR_MARK occurs for various reasons including invalid data type. */ if (index_type != error_mark_node) { - for (i = TREE_VEC_LENGTH (vec); --i >= 0; ) - { - tree elt = TREE_VEC_ELT (vec, i); + tree elt; - /* Handle default labels specially. */ - if (!CASE_HIGH (elt) && !CASE_LOW (elt)) - { - gcc_assert (!default_label_decl); - default_label_decl = CASE_LABEL (elt); - } - else - case_list = add_case_node (case_list, index_type, - CASE_LOW (elt), CASE_HIGH (elt), - CASE_LABEL (elt)); + /* The default case is at the end of TREE_VEC. */ + elt = TREE_VEC_ELT (vec, TREE_VEC_LENGTH (vec) - 1); + gcc_assert (!CASE_HIGH (elt)); + gcc_assert (!CASE_LOW (elt)); + default_label_decl = CASE_LABEL (elt); + + for (i = TREE_VEC_LENGTH (vec) - 1; --i >= 0; ) + { + elt = TREE_VEC_ELT (vec, i); + gcc_assert (CASE_LOW (elt)); + case_list = add_case_node (case_list, index_type, + CASE_LOW (elt), CASE_HIGH (elt), + CASE_LABEL (elt)); } @@ -2379,14 +2380,6 @@ expand_case (tree exp) start = get_last_insn (); } - /* If we don't have a default-label, create one here, - after the body of the switch. */ - if (default_label_decl == 0) - { - default_label_decl - = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE); - expand_label (default_label_decl); - } default_label = label_rtx (default_label_decl); before_case = get_last_insn (); |