diff options
author | kazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-10-24 00:46:10 +0000 |
---|---|---|
committer | kazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-10-24 00:46:10 +0000 |
commit | 9d6b26873815178aa8743b4d0cfa98d99293275e (patch) | |
tree | b4831a3070cafc945a02d7cdf160b0fccc235c29 /gcc/stmt.c | |
parent | 0d9e986a81c53d8bfb96e7b8681ef5922b1dd539 (diff) | |
download | gcc-9d6b26873815178aa8743b4d0cfa98d99293275e.tar.gz |
* stmt.c (expand_case): Handle the default label outside of
the for loop. Remove code to handle a missing default label.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@89502 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/stmt.c')
-rw-r--r-- | gcc/stmt.c | 37 |
1 files changed, 15 insertions, 22 deletions
diff --git a/gcc/stmt.c b/gcc/stmt.c index 4aa242e6435..3a9f6bc0b2f 100644 --- a/gcc/stmt.c +++ b/gcc/stmt.c @@ -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 (); |