statements are full-expressions. We record that fact here. */
STMT_IS_FULL_EXPR_P (last_tree) = stmts_are_full_exprs_p ();
- /* Keep track of the number of statements in this function. */
- if (current_function_decl)
- ++DECL_NUM_STMTS (current_function_decl);
-
return t;
}
void
genrtl_do_pushlevel (void)
{
- emit_line_note (input_filename, input_line);
+ emit_line_note (input_location);
clear_last_expr ();
}
if (TREE_CODE (destination) == LABEL_DECL)
TREE_USED (destination) = 1;
- emit_line_note (input_filename, input_line);
+ emit_line_note (input_location);
if (TREE_CODE (destination) == LABEL_DECL)
{
{
if (expr != NULL_TREE)
{
- emit_line_note (input_filename, input_line);
+ emit_line_note (input_location);
if (stmts_are_full_exprs_p ())
expand_start_target_temps ();
genrtl_decl_stmt (tree t)
{
tree decl;
- emit_line_note (input_filename, input_line);
+ emit_line_note (input_location);
decl = DECL_STMT_DECL (t);
/* If this is a declaration for an automatic local
variable, initialize it. Note that we might also see a
tree cond;
genrtl_do_pushlevel ();
cond = expand_cond (IF_COND (t));
- emit_line_note (input_filename, input_line);
+ emit_line_note (input_location);
expand_start_cond (cond, 0);
if (THEN_CLAUSE (t))
{
tree cond = WHILE_COND (t);
emit_nop ();
- emit_line_note (input_filename, input_line);
+ emit_line_note (input_location);
expand_start_loop (1);
genrtl_do_pushlevel ();
if (cond && !integer_nonzerop (cond))
{
cond = expand_cond (cond);
- emit_line_note (input_filename, input_line);
+ emit_line_note (input_location);
expand_exit_loop_top_cond (0, cond);
genrtl_do_pushlevel ();
}
else if (integer_nonzerop (cond))
{
emit_nop ();
- emit_line_note (input_filename, input_line);
+ emit_line_note (input_location);
expand_start_loop (1);
expand_stmt (body);
- emit_line_note (input_filename, input_line);
+ emit_line_note (input_location);
expand_end_loop ();
}
else
{
emit_nop ();
- emit_line_note (input_filename, input_line);
+ emit_line_note (input_location);
expand_start_loop_continue_elsewhere (1);
expand_stmt (body);
expand_loop_continue_here ();
cond = expand_cond (cond);
- emit_line_note (input_filename, input_line);
+ emit_line_note (input_location);
expand_exit_loop_if_false (0, cond);
expand_end_loop ();
}
expr = RETURN_STMT_EXPR (stmt);
- emit_line_note (input_filename, input_line);
+ emit_line_note (input_location);
if (!expr)
expand_null_return ();
else
/* Expand the initialization. */
emit_nop ();
- emit_line_note (input_filename, input_line);
+ emit_line_note (input_location);
if (FOR_EXPR (t))
expand_start_loop_continue_elsewhere (1);
else
if (cond && !integer_nonzerop (cond))
{
cond = expand_cond (cond);
- emit_line_note (input_filename, input_line);
+ emit_line_note (input_location);
expand_exit_loop_top_cond (0, cond);
genrtl_do_pushlevel ();
}
/* Expand the increment expression. */
input_location = saved_loc;
- emit_line_note (input_filename, input_line);
+ emit_line_note (input_location);
if (FOR_EXPR (t))
{
expand_loop_continue_here ();
void
genrtl_break_stmt (void)
{
- emit_line_note (input_filename, input_line);
+ emit_line_note (input_location);
if ( ! expand_exit_something ())
error ("break statement not within loop or switch");
}
void
genrtl_continue_stmt (void)
{
- emit_line_note (input_filename, input_line);
+ emit_line_note (input_location);
if (! expand_continue_loop (0))
error ("continue statement not within a loop");
}
if (TREE_CODE (fn) == FUNCTION_DECL
&& DECL_CONTEXT (fn) == current_function_decl
&& DECL_SAVED_INSNS (fn)
+ && DECL_SAVED_INSNS (fn)->saved_for_inline
&& !TREE_ASM_WRITTEN (fn)
&& TREE_ADDRESSABLE (fn))
{
if (cond == error_mark_node)
/* The code is in error, but we don't want expand_end_case to
crash. */
- cond = boolean_false_node;
+ cond = truthvalue_false_node;
- emit_line_note (input_filename, input_line);
+ emit_line_note (input_location);
expand_start_case (1, cond, TREE_TYPE (cond), "switch statement");
expand_stmt (expand_unreachable_stmt (SWITCH_BODY (t), warn_notreached));
expand_end_case_type (cond, SWITCH_TYPE (t));
cv_qualifier = NULL_TREE;
}
- emit_line_note (input_filename, input_line);
+ emit_line_note (input_location);
if (asm_input_p)
expand_asm (string, cv_qualifier != NULL_TREE);
else
c_expand_asm_operands (string, output_operands, input_operands,
clobbers, cv_qualifier != NULL_TREE,
- input_filename, input_line);
+ input_location);
}
/* Generate the RTL for a CLEANUP_STMT. */
genrtl_cleanup_stmt (tree t)
{
tree decl = CLEANUP_DECL (t);
- if (!decl || (DECL_SIZE (decl) && TREE_TYPE (decl) != error_mark_node))
+ if (!decl || !DECL_P (decl)
+ || (DECL_SIZE (decl) && TREE_TYPE (decl) != error_mark_node))
expand_decl_cleanup_eh (decl, CLEANUP_EXPR (t), CLEANUP_EH_ONLY (t));
}
find_reachable_label (tree exp)
{
location_t saved_loc = input_location;
- tree ret = walk_tree (&exp, find_reachable_label_1, NULL, NULL);
+ tree ret = walk_tree_without_duplicates
+ (&exp, find_reachable_label_1, NULL);
input_location = saved_loc;
return ret;
}