Commit 4e0148df by Kazu Hirata Committed by Kazu Hirata

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
parent 545b6261
2004-10-24 Kazu Hirata <kazu@cs.umass.edu>
* stmt.c (expand_case): Handle the default label outside of
the for loop. Remove code to handle a missing default label.
2004-10-23 Kazu Hirata <kazu@cs.umass.edu> 2004-10-23 Kazu Hirata <kazu@cs.umass.edu>
* dbxout.c (dbxout_function_decl): Don't use * dbxout.c (dbxout_function_decl): Don't use
......
...@@ -2341,7 +2341,7 @@ expand_case (tree exp) ...@@ -2341,7 +2341,7 @@ expand_case (tree exp)
struct case_node *case_list = 0; struct case_node *case_list = 0;
/* Label to jump to if no case matches. */ /* 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 /* The switch body is lowered in gimplify.c, we should never have
switches with a non-NULL SWITCH_BODY here. */ switches with a non-NULL SWITCH_BODY here. */
...@@ -2353,20 +2353,21 @@ expand_case (tree exp) ...@@ -2353,20 +2353,21 @@ expand_case (tree exp)
/* An ERROR_MARK occurs for various reasons including invalid data type. */ /* An ERROR_MARK occurs for various reasons including invalid data type. */
if (index_type != error_mark_node) if (index_type != error_mark_node)
{ {
for (i = TREE_VEC_LENGTH (vec); --i >= 0; ) tree elt;
{
tree elt = TREE_VEC_ELT (vec, i);
/* Handle default labels specially. */ /* The default case is at the end of TREE_VEC. */
if (!CASE_HIGH (elt) && !CASE_LOW (elt)) elt = TREE_VEC_ELT (vec, TREE_VEC_LENGTH (vec) - 1);
{ gcc_assert (!CASE_HIGH (elt));
gcc_assert (!default_label_decl); gcc_assert (!CASE_LOW (elt));
default_label_decl = CASE_LABEL (elt); default_label_decl = CASE_LABEL (elt);
}
else for (i = TREE_VEC_LENGTH (vec) - 1; --i >= 0; )
case_list = add_case_node (case_list, index_type, {
CASE_LOW (elt), CASE_HIGH (elt), elt = TREE_VEC_ELT (vec, i);
CASE_LABEL (elt)); 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) ...@@ -2379,14 +2380,6 @@ expand_case (tree exp)
start = get_last_insn (); 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); default_label = label_rtx (default_label_decl);
before_case = get_last_insn (); before_case = get_last_insn ();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment