Commit 65dc645a by Martin Jambor Committed by Martin Jambor

expr.c (expand_expr_real_1): Pass type, not the expression, to…

expr.c (expand_expr_real_1): Pass type, not the expression, to set_mem_attributes for a memory temporary.

2012-04-13  Martin Jambor  <mjambor@suse.cz>

	* expr.c (expand_expr_real_1): Pass type, not the expression, to
	set_mem_attributes for a memory temporary. Do not call the function
	for the memory temporary created for a bitfield.

From-SVN: r186426
parent 1adbb361
2012-04-13 Martin Jambor <mjambor@suse.cz>
* expr.c (expand_expr_real_1): Pass type, not the expression, to
set_mem_attributes for a memory temporary. Do not call the function
for the memory temporary created for a bitfield.
2012-04-13 Alexandre Oliva <aoliva@redhat.com> 2012-04-13 Alexandre Oliva <aoliva@redhat.com>
PR debug/48866 PR debug/48866
......
...@@ -9603,6 +9603,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, ...@@ -9603,6 +9603,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
tree tem = get_inner_reference (exp, &bitsize, &bitpos, &offset, tree tem = get_inner_reference (exp, &bitsize, &bitpos, &offset,
&mode1, &unsignedp, &volatilep, true); &mode1, &unsignedp, &volatilep, true);
rtx orig_op0, memloc; rtx orig_op0, memloc;
bool mem_attrs_from_type = false;
/* If we got back the original object, something is wrong. Perhaps /* If we got back the original object, something is wrong. Perhaps
we are evaluating an expression too early. In any event, don't we are evaluating an expression too early. In any event, don't
...@@ -9708,6 +9709,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, ...@@ -9708,6 +9709,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
memloc = assign_temp (nt, 1, 1, 1); memloc = assign_temp (nt, 1, 1, 1);
emit_move_insn (memloc, op0); emit_move_insn (memloc, op0);
op0 = memloc; op0 = memloc;
mem_attrs_from_type = true;
} }
if (offset) if (offset)
...@@ -9880,7 +9882,6 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, ...@@ -9880,7 +9882,6 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
emit_move_insn (new_rtx, op0); emit_move_insn (new_rtx, op0);
op0 = copy_rtx (new_rtx); op0 = copy_rtx (new_rtx);
PUT_MODE (op0, BLKmode); PUT_MODE (op0, BLKmode);
set_mem_attributes (op0, exp, 1);
} }
return op0; return op0;
...@@ -9901,7 +9902,14 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, ...@@ -9901,7 +9902,14 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
if (op0 == orig_op0) if (op0 == orig_op0)
op0 = copy_rtx (op0); op0 = copy_rtx (op0);
set_mem_attributes (op0, exp, 0); /* If op0 is a temporary because of forcing to memory, pass only the
type to set_mem_attributes so that the original expression is never
marked as ADDRESSABLE through MEM_EXPR of the temporary. */
if (mem_attrs_from_type)
set_mem_attributes (op0, type, 0);
else
set_mem_attributes (op0, exp, 0);
if (REG_P (XEXP (op0, 0))) if (REG_P (XEXP (op0, 0)))
mark_reg_pointer (XEXP (op0, 0), MEM_ALIGN (op0)); mark_reg_pointer (XEXP (op0, 0), MEM_ALIGN (op0));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment