c-semantics.c (expand_unreachable_stmt): Return a tree.

* c-semantics.c (expand_unreachable_stmt): Return a tree.
	(expand_stmt): Update for change to expand_unreachable_stmt.
	(expand_unreachable_if_stmt): Likewise.

From-SVN: r66252
This commit is contained in:
Geoffrey Keating 2003-04-29 20:39:12 +00:00 committed by Geoffrey Keating
parent b9538b2e88
commit e55614cab2
2 changed files with 52 additions and 44 deletions

View File

@ -1,5 +1,9 @@
2003-04-29 Geoffrey Keating <geoffk@apple.com>
* c-semantics.c (expand_unreachable_stmt): Return a tree.
(expand_stmt): Update for change to expand_unreachable_stmt.
(expand_unreachable_if_stmt): Likewise.
* Makefile.in (quickstrap): Pass BOOT_CFLAGS to submake.
2003-04-29 Jason Merrill <jason@redhat.com>

View File

@ -55,7 +55,7 @@ void (*lang_expand_decl_stmt) PARAMS ((tree));
static tree find_reachable_label_1 PARAMS ((tree *, int *, void *));
static tree find_reachable_label PARAMS ((tree));
static bool expand_unreachable_if_stmt PARAMS ((tree));
static bool expand_unreachable_stmt PARAMS ((tree, int));
static tree expand_unreachable_stmt PARAMS ((tree, int));
/* Create an empty statement tree rooted at T. */
@ -823,8 +823,8 @@ expand_stmt (t)
case RETURN_STMT:
genrtl_return_stmt (t);
expand_unreachable_stmt (TREE_CHAIN (t), warn_notreached);
return;
t = expand_unreachable_stmt (TREE_CHAIN (t), warn_notreached);
goto process_t;
case EXPR_STMT:
genrtl_expr_stmt_value (EXPR_STMT_EXPR (t), TREE_ADDRESSABLE (t),
@ -859,13 +859,13 @@ expand_stmt (t)
case BREAK_STMT:
genrtl_break_stmt ();
expand_unreachable_stmt (TREE_CHAIN (t), warn_notreached);
return;
t = expand_unreachable_stmt (TREE_CHAIN (t), warn_notreached);
goto process_t;
case CONTINUE_STMT:
genrtl_continue_stmt ();
expand_unreachable_stmt (TREE_CHAIN (t), warn_notreached);
return;
t = expand_unreachable_stmt (TREE_CHAIN (t), warn_notreached);
goto process_t;
case SWITCH_STMT:
genrtl_switch_stmt (t);
@ -890,8 +890,8 @@ expand_stmt (t)
NOTE_PREDICTION (note) = NOTE_PREDICT (PRED_GOTO, NOT_TAKEN);
}
genrtl_goto_stmt (GOTO_DESTINATION (t));
expand_unreachable_stmt (TREE_CHAIN (t), warn_notreached);
return;
t = expand_unreachable_stmt (TREE_CHAIN (t), warn_notreached);
goto process_t;
case ASM_STMT:
genrtl_asm_stmt (ASM_CV_QUAL (t), ASM_STRING (t),
@ -915,12 +915,13 @@ expand_stmt (t)
break;
}
/* Go on to the next statement in this scope. */
t = TREE_CHAIN (t);
process_t:
/* Restore saved state. */
current_stmt_tree ()->stmts_are_full_exprs_p
= saved_stmts_are_full_exprs_p;
/* Go on to the next statement in this scope. */
t = TREE_CHAIN (t);
}
}
@ -964,6 +965,8 @@ static bool
expand_unreachable_if_stmt (t)
tree t;
{
tree n;
if (find_reachable_label (IF_COND (t)) != NULL_TREE)
{
genrtl_if_stmt (t);
@ -972,31 +975,38 @@ expand_unreachable_if_stmt (t)
if (THEN_CLAUSE (t) && ELSE_CLAUSE (t))
{
if (expand_unreachable_stmt (THEN_CLAUSE (t), 0))
n = expand_unreachable_stmt (THEN_CLAUSE (t), 0);
if (n != NULL_TREE)
{
rtx label;
expand_stmt (n);
label = gen_label_rtx ();
emit_jump (label);
expand_unreachable_stmt (ELSE_CLAUSE (t), 0);
expand_stmt (expand_unreachable_stmt (ELSE_CLAUSE (t), 0));
emit_label (label);
return true;
}
else
return expand_unreachable_stmt (ELSE_CLAUSE (t), 0);
n = expand_unreachable_stmt (ELSE_CLAUSE (t), 0);
}
else if (THEN_CLAUSE (t))
return expand_unreachable_stmt (THEN_CLAUSE (t), 0);
n = expand_unreachable_stmt (THEN_CLAUSE (t), 0);
else if (ELSE_CLAUSE (t))
return expand_unreachable_stmt (ELSE_CLAUSE (t), 0);
return false;
n = expand_unreachable_stmt (ELSE_CLAUSE (t), 0);
else
n = NULL_TREE;
expand_stmt (n);
return n != NULL_TREE;
}
/* Expand an unreachable statement list. This function skips all
statements preceding the first potentially reachable label and
then expands the statements normally with expand_stmt. This
function returns true if such a reachable label was found. */
static bool
then returns the label (or, in same cases, the statement after
one containing the label). */
static tree
expand_unreachable_stmt (t, warn)
tree t;
int warn;
@ -1037,36 +1047,31 @@ expand_unreachable_stmt (t, warn)
case RETURN_STMT:
if (find_reachable_label (RETURN_STMT_EXPR (t)) != NULL_TREE)
{
expand_stmt (t);
return true;
}
return t;
break;
case EXPR_STMT:
if (find_reachable_label (EXPR_STMT_EXPR (t)) != NULL_TREE)
{
expand_stmt (t);
return true;
}
return t;
break;
case IF_STMT:
if (expand_unreachable_if_stmt (t))
{
expand_stmt (TREE_CHAIN (t));
return true;
}
return TREE_CHAIN (t);
break;
case COMPOUND_STMT:
if (expand_unreachable_stmt (COMPOUND_BODY (t), warn))
{
expand_stmt (TREE_CHAIN (t));
return true;
}
warn = false;
break;
{
tree n;
n = expand_unreachable_stmt (COMPOUND_BODY (t), warn);
if (n != NULL_TREE)
{
expand_stmt (n);
return TREE_CHAIN (t);
}
warn = false;
break;
}
case SCOPE_STMT:
saved = stmts_are_full_exprs_p ();
@ -1076,11 +1081,10 @@ expand_unreachable_stmt (t, warn)
break;
default:
expand_stmt (t);
return true;
return t;
}
t = TREE_CHAIN (t);
}
return false;
return NULL_TREE;
}