diff options
author | Jakub Jelinek <jakub@redhat.com> | 2010-03-24 14:41:30 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2010-03-24 14:41:30 +0100 |
commit | d0ed412a967910ba8fe96f328a22dc72e945181a (patch) | |
tree | 20f32d2f9c282d0e29f5a06f4b4707bb295fab42 /gcc/expr.c | |
parent | 012cd3b6b52f81950a23953ef21e383d7bd29d06 (diff) | |
download | gcc-d0ed412a967910ba8fe96f328a22dc72e945181a.zip gcc-d0ed412a967910ba8fe96f328a22dc72e945181a.tar.gz gcc-d0ed412a967910ba8fe96f328a22dc72e945181a.tar.bz2 |
re PR debug/19192 (Current development gcc generates inaccurate line info for example code)
PR debug/19192
PR debug/43479
* cfgexpand.c (gimple_assign_rhs_to_tree): Also set TREE_BLOCK
from gimple_block.
* expr.c (expand_expr_real): Restore previous
curr_insn_source_location and curr_insn_block after
expand_expr_real_1 call.
(expand_expr_real_1) <case SSA_NAME>: Call expand_expr_real
instead of expand_expr_real_1.
* gcc.dg/guality/pr43479.c: New test.
* gcc.dg/debug/dwarf2/inline2.c (third): Make a a global var
and add volatile keyword.
From-SVN: r157693
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 8 |
1 files changed, 6 insertions, 2 deletions
@@ -7176,6 +7176,8 @@ expand_expr_real (tree exp, rtx target, enum machine_mode tmode, if (cfun && EXPR_HAS_LOCATION (exp)) { location_t saved_location = input_location; + location_t saved_curr_loc = get_curr_insn_source_location (); + tree saved_block = get_curr_insn_block (); input_location = EXPR_LOCATION (exp); set_curr_insn_source_location (input_location); @@ -7185,6 +7187,8 @@ expand_expr_real (tree exp, rtx target, enum machine_mode tmode, ret = expand_expr_real_1 (exp, target, tmode, modifier, alt_rtl); input_location = saved_location; + set_curr_insn_block (saved_block); + set_curr_insn_source_location (saved_curr_loc); } else { @@ -8409,8 +8413,8 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, { gimple g = get_gimple_for_ssa_name (exp); if (g) - return expand_expr_real_1 (gimple_assign_rhs_to_tree (g), target, - tmode, modifier, NULL); + return expand_expr_real (gimple_assign_rhs_to_tree (g), target, + tmode, modifier, NULL); } decl_rtl = get_rtx_for_ssa_name (exp); exp = SSA_NAME_VAR (exp); |