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
This commit is contained in:
Kazu Hirata 2004-10-24 00:46:10 +00:00 committed by Kazu Hirata
parent 545b6261a4
commit 4e0148df67
2 changed files with 20 additions and 22 deletions

View File

@ -1,3 +1,8 @@
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>
* dbxout.c (dbxout_function_decl): Don't use

View File

@ -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 ();