summaryrefslogtreecommitdiff
path: root/gcc/stmt.c
diff options
context:
space:
mode:
authorkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>2004-10-24 00:46:10 +0000
committerkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>2004-10-24 00:46:10 +0000
commit9d6b26873815178aa8743b4d0cfa98d99293275e (patch)
treeb4831a3070cafc945a02d7cdf160b0fccc235c29 /gcc/stmt.c
parent0d9e986a81c53d8bfb96e7b8681ef5922b1dd539 (diff)
downloadgcc-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.c37
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 ();