aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2010-03-24 14:41:30 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2010-03-24 14:41:30 +0100
commitd0ed412a967910ba8fe96f328a22dc72e945181a (patch)
tree20f32d2f9c282d0e29f5a06f4b4707bb295fab42 /gcc/expr.c
parent012cd3b6b52f81950a23953ef21e383d7bd29d06 (diff)
downloadgcc-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.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 1e74f2a..ad66d93 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -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);