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>
PR debug/48866
......
......@@ -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,
&mode1, &unsignedp, &volatilep, true);
rtx orig_op0, memloc;
bool mem_attrs_from_type = false;
/* If we got back the original object, something is wrong. Perhaps
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,
memloc = assign_temp (nt, 1, 1, 1);
emit_move_insn (memloc, op0);
op0 = memloc;
mem_attrs_from_type = true;
}
if (offset)
......@@ -9880,7 +9882,6 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
emit_move_insn (new_rtx, op0);
op0 = copy_rtx (new_rtx);
PUT_MODE (op0, BLKmode);
set_mem_attributes (op0, exp, 1);
}
return op0;
......@@ -9901,7 +9902,14 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
if (op0 == orig_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)))
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