diff options
author | Dehao Chen <dehao@google.com> | 2012-11-01 00:08:51 +0000 |
---|---|---|
committer | Dehao Chen <dehao@gcc.gnu.org> | 2012-11-01 00:08:51 +0000 |
commit | 29f5bccbfc09753b7e465285956bb15fe3bc10b0 (patch) | |
tree | 06a68854befb9c71d71c7a7a73535a6958147b76 /gcc/expr.c | |
parent | 0f379f762d2f3e7f84c038368b9e32c50c8deaab (diff) | |
download | gcc-29f5bccbfc09753b7e465285956bb15fe3bc10b0.zip gcc-29f5bccbfc09753b7e465285956bb15fe3bc10b0.tar.gz gcc-29f5bccbfc09753b7e465285956bb15fe3bc10b0.tar.bz2 |
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
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 41 |
1 files changed, 12 insertions, 29 deletions
@@ -5024,7 +5024,7 @@ store_expr (tree exp, rtx target, int call_param_p, bool nontemporal) { rtx temp; rtx alt_rtl = NULL_RTX; - location_t loc = EXPR_LOCATION (exp); + location_t loc = curr_insn_location (); 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; } - /* 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); - - input_location = saved_location; - set_curr_insn_location (saved_curr_loc); - } - else - { - ret = expand_expr_real_1 (exp, target, tmode, modifier, alt_rtl); - } - + ret = expand_expr_real_1 (exp, target, tmode, modifier, alt_rtl); return ret; } @@ -9244,8 +9220,15 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, g = SSA_NAME_DEF_STMT (exp); if (g) { - rtx r = expand_expr_real (gimple_assign_rhs_to_tree (g), target, - tmode, modifier, NULL); + 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); + input_location = saved_loc; + set_curr_insn_location (saved_loc); if (REG_P (r) && !REG_EXPR (r)) set_reg_attrs_for_decl_rtl (SSA_NAME_VAR (exp), r); return r; @@ -9475,7 +9458,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, with non-BLKmode values. */ gcc_assert (GET_MODE (ret) != BLKmode); - val = build_decl (EXPR_LOCATION (exp), + val = build_decl (curr_insn_location (), VAR_DECL, NULL, TREE_TYPE (exp)); DECL_ARTIFICIAL (val) = 1; DECL_IGNORED_P (val) = 1; |