tree-eh.c (do_return_redirection): Set location for jump statement.
gcc: 2012-10-31 Dehao Chen <dehao@google.com> * tree-eh.c (do_return_redirection): Set location for jump statement. (do_goto_redirection): Likewise. (frob_into_branch_around): Likewise. (lower_try_finally_nofallthru): Likewise. (lower_try_finally_copy): Likewise. (lower_try_finally_switch): Likewise. * expr.c (store_expr): Use current insn location instead of expr location. (expand_expr_real): Likewise. (expand_expr_real_1): Likewise. gcc/testsuite: 2012-10-31 Dehao Chen <dehao@google.com> * g++.dg/debug/dwarf2/block.C: New testcase. From-SVN: r193053
This commit is contained in:
parent
0f379f762d
commit
29f5bccbfc
|
@ -1,3 +1,16 @@
|
||||||
|
2012-10-31 Dehao Chen <dehao@google.com>
|
||||||
|
|
||||||
|
* tree-eh.c (do_return_redirection): Set location for jump statement.
|
||||||
|
(do_goto_redirection): Likewise.
|
||||||
|
(frob_into_branch_around): Likewise.
|
||||||
|
(lower_try_finally_nofallthru): Likewise.
|
||||||
|
(lower_try_finally_copy): Likewise.
|
||||||
|
(lower_try_finally_switch): Likewise.
|
||||||
|
* expr.c (store_expr): Use current insn location instead of expr
|
||||||
|
location.
|
||||||
|
(expand_expr_real): Likewise.
|
||||||
|
(expand_expr_real_1): Likewise.
|
||||||
|
|
||||||
2012-10-31 Easwaran Raman <eraman@google.com>
|
2012-10-31 Easwaran Raman <eraman@google.com>
|
||||||
|
|
||||||
PR target/54938
|
PR target/54938
|
||||||
|
|
37
gcc/expr.c
37
gcc/expr.c
|
@ -5024,7 +5024,7 @@ store_expr (tree exp, rtx target, int call_param_p, bool nontemporal)
|
||||||
{
|
{
|
||||||
rtx temp;
|
rtx temp;
|
||||||
rtx alt_rtl = NULL_RTX;
|
rtx alt_rtl = NULL_RTX;
|
||||||
location_t loc = EXPR_LOCATION (exp);
|
location_t loc = curr_insn_location ();
|
||||||
|
|
||||||
if (VOID_TYPE_P (TREE_TYPE (exp)))
|
if (VOID_TYPE_P (TREE_TYPE (exp)))
|
||||||
{
|
{
|
||||||
|
@ -7863,31 +7863,7 @@ expand_expr_real (tree exp, rtx target, enum machine_mode tmode,
|
||||||
return ret ? ret : const0_rtx;
|
return ret ? ret : const0_rtx;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If this is an expression of some kind and it has an associated line
|
|
||||||
number, then emit the line number before expanding the expression.
|
|
||||||
|
|
||||||
We need to save and restore the file and line information so that
|
|
||||||
errors discovered during expansion are emitted with the right
|
|
||||||
information. It would be better of the diagnostic routines
|
|
||||||
used the file/line information embedded in the tree nodes rather
|
|
||||||
than globals. */
|
|
||||||
if (cfun && EXPR_HAS_LOCATION (exp))
|
|
||||||
{
|
|
||||||
location_t saved_location = input_location;
|
|
||||||
location_t saved_curr_loc = curr_insn_location ();
|
|
||||||
input_location = EXPR_LOCATION (exp);
|
|
||||||
set_curr_insn_location (input_location);
|
|
||||||
|
|
||||||
ret = expand_expr_real_1 (exp, target, tmode, modifier, alt_rtl);
|
ret = expand_expr_real_1 (exp, target, tmode, modifier, alt_rtl);
|
||||||
|
|
||||||
input_location = saved_location;
|
|
||||||
set_curr_insn_location (saved_curr_loc);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ret = expand_expr_real_1 (exp, target, tmode, modifier, alt_rtl);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9244,8 +9220,15 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
|
||||||
g = SSA_NAME_DEF_STMT (exp);
|
g = SSA_NAME_DEF_STMT (exp);
|
||||||
if (g)
|
if (g)
|
||||||
{
|
{
|
||||||
rtx r = expand_expr_real (gimple_assign_rhs_to_tree (g), target,
|
rtx r;
|
||||||
|
location_t saved_loc = input_location;
|
||||||
|
|
||||||
|
input_location = gimple_location (g);
|
||||||
|
set_curr_insn_location (input_location);
|
||||||
|
r = expand_expr_real (gimple_assign_rhs_to_tree (g), target,
|
||||||
tmode, modifier, NULL);
|
tmode, modifier, NULL);
|
||||||
|
input_location = saved_loc;
|
||||||
|
set_curr_insn_location (saved_loc);
|
||||||
if (REG_P (r) && !REG_EXPR (r))
|
if (REG_P (r) && !REG_EXPR (r))
|
||||||
set_reg_attrs_for_decl_rtl (SSA_NAME_VAR (exp), r);
|
set_reg_attrs_for_decl_rtl (SSA_NAME_VAR (exp), r);
|
||||||
return r;
|
return r;
|
||||||
|
@ -9475,7 +9458,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
|
||||||
with non-BLKmode values. */
|
with non-BLKmode values. */
|
||||||
gcc_assert (GET_MODE (ret) != BLKmode);
|
gcc_assert (GET_MODE (ret) != BLKmode);
|
||||||
|
|
||||||
val = build_decl (EXPR_LOCATION (exp),
|
val = build_decl (curr_insn_location (),
|
||||||
VAR_DECL, NULL, TREE_TYPE (exp));
|
VAR_DECL, NULL, TREE_TYPE (exp));
|
||||||
DECL_ARTIFICIAL (val) = 1;
|
DECL_ARTIFICIAL (val) = 1;
|
||||||
DECL_IGNORED_P (val) = 1;
|
DECL_IGNORED_P (val) = 1;
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2012-10-31 Dehao Chen <dehao@google.com>
|
||||||
|
|
||||||
|
* g++.dg/debug/dwarf2/block.C: New testcase.
|
||||||
|
|
||||||
2012-10-31 Jan Hubicka <jh@suse.cz>
|
2012-10-31 Jan Hubicka <jh@suse.cz>
|
||||||
|
|
||||||
* gcc.dg/pr44974.c: Add noinline.
|
* gcc.dg/pr44974.c: Add noinline.
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
// Compiler should not generate too many lexical blocks for this function.
|
||||||
|
// { dg-do compile { target { i?86-*-* x86_64-*-* } } }
|
||||||
|
// { dg-options "-O0 -fno-exceptions -g -dA" }
|
||||||
|
|
||||||
|
union UElement {
|
||||||
|
void* pointer;
|
||||||
|
int integer;
|
||||||
|
};
|
||||||
|
struct UColToken {
|
||||||
|
unsigned source;
|
||||||
|
unsigned char **rulesToParseHdl;
|
||||||
|
};
|
||||||
|
|
||||||
|
int uhash_hashTokens(const union UElement k)
|
||||||
|
{
|
||||||
|
int hash = 0;
|
||||||
|
struct UColToken *key = (struct UColToken *)k.pointer;
|
||||||
|
if (key != 0) {
|
||||||
|
int len = (key->source & 0xFF000000)>>24;
|
||||||
|
int inc = ((len - 32) / 32) + 1;
|
||||||
|
const unsigned char *p = (key->source & 0x00FFFFFF)
|
||||||
|
+ *(key->rulesToParseHdl);
|
||||||
|
const unsigned char *limit = p + len;
|
||||||
|
hash = *p + *limit;
|
||||||
|
}
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
// { dg-final { scan-assembler-not "LBB10" } }
|
|
@ -739,6 +739,7 @@ do_return_redirection (struct goto_queue_node *q, tree finlab, gimple_seq mod)
|
||||||
gimple_seq_add_seq (&q->repl_stmt, mod);
|
gimple_seq_add_seq (&q->repl_stmt, mod);
|
||||||
|
|
||||||
x = gimple_build_goto (finlab);
|
x = gimple_build_goto (finlab);
|
||||||
|
gimple_set_location (x, q->location);
|
||||||
gimple_seq_add_stmt (&q->repl_stmt, x);
|
gimple_seq_add_stmt (&q->repl_stmt, x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -758,6 +759,7 @@ do_goto_redirection (struct goto_queue_node *q, tree finlab, gimple_seq mod,
|
||||||
gimple_seq_add_seq (&q->repl_stmt, mod);
|
gimple_seq_add_seq (&q->repl_stmt, mod);
|
||||||
|
|
||||||
x = gimple_build_goto (finlab);
|
x = gimple_build_goto (finlab);
|
||||||
|
gimple_set_location (x, q->location);
|
||||||
gimple_seq_add_stmt (&q->repl_stmt, x);
|
gimple_seq_add_stmt (&q->repl_stmt, x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -857,6 +859,7 @@ frob_into_branch_around (gimple tp, eh_region region, tree over)
|
||||||
if (!over)
|
if (!over)
|
||||||
over = create_artificial_label (loc);
|
over = create_artificial_label (loc);
|
||||||
x = gimple_build_goto (over);
|
x = gimple_build_goto (over);
|
||||||
|
gimple_set_location (x, loc);
|
||||||
gimple_seq_add_stmt (&cleanup, x);
|
gimple_seq_add_stmt (&cleanup, x);
|
||||||
}
|
}
|
||||||
gimple_seq_add_seq (&eh_seq, cleanup);
|
gimple_seq_add_seq (&eh_seq, cleanup);
|
||||||
|
@ -1085,6 +1088,7 @@ lower_try_finally_nofallthru (struct leh_state *state,
|
||||||
emit_post_landing_pad (&eh_seq, tf->region);
|
emit_post_landing_pad (&eh_seq, tf->region);
|
||||||
|
|
||||||
x = gimple_build_goto (lab);
|
x = gimple_build_goto (lab);
|
||||||
|
gimple_set_location (x, gimple_location (tf->try_finally_expr));
|
||||||
gimple_seq_add_stmt (&eh_seq, x);
|
gimple_seq_add_stmt (&eh_seq, x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1223,6 +1227,7 @@ lower_try_finally_copy (struct leh_state *state, struct leh_tf_state *tf)
|
||||||
|
|
||||||
tmp = lower_try_finally_fallthru_label (tf);
|
tmp = lower_try_finally_fallthru_label (tf);
|
||||||
x = gimple_build_goto (tmp);
|
x = gimple_build_goto (tmp);
|
||||||
|
gimple_set_location (x, tf_loc);
|
||||||
gimple_seq_add_stmt (&new_stmt, x);
|
gimple_seq_add_stmt (&new_stmt, x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1395,6 +1400,7 @@ lower_try_finally_switch (struct leh_state *state, struct leh_tf_state *tf)
|
||||||
|
|
||||||
tmp = lower_try_finally_fallthru_label (tf);
|
tmp = lower_try_finally_fallthru_label (tf);
|
||||||
x = gimple_build_goto (tmp);
|
x = gimple_build_goto (tmp);
|
||||||
|
gimple_set_location (x, tf_loc);
|
||||||
gimple_seq_add_stmt (&switch_body, x);
|
gimple_seq_add_stmt (&switch_body, x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1423,6 +1429,7 @@ lower_try_finally_switch (struct leh_state *state, struct leh_tf_state *tf)
|
||||||
gimple_seq_add_stmt (&eh_seq, x);
|
gimple_seq_add_stmt (&eh_seq, x);
|
||||||
|
|
||||||
x = gimple_build_goto (finally_label);
|
x = gimple_build_goto (finally_label);
|
||||||
|
gimple_set_location (x, tf_loc);
|
||||||
gimple_seq_add_stmt (&eh_seq, x);
|
gimple_seq_add_stmt (&eh_seq, x);
|
||||||
|
|
||||||
tmp = build_int_cst (integer_type_node, eh_index);
|
tmp = build_int_cst (integer_type_node, eh_index);
|
||||||
|
|
Loading…
Reference in New Issue