re PR middle-end/42898 (volatile structures and compound literal initializers)

2010-01-31  Richard Guenther  <rguenther@suse.de>

	PR middle-end/42898
	* gimplify.c (gimplify_init_constructor): For volatile LHS
	initialize a temporary.

	* gcc.dg/torture/pr42898.c: New testcase.

From-SVN: r156405
This commit is contained in:
Richard Guenther 2010-01-31 17:04:29 +00:00 committed by Richard Biener
parent c80d1f1506
commit a3c66ee4f8
4 changed files with 49 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2010-01-31 Richard Guenther <rguenther@suse.de>
PR middle-end/42898
* gimplify.c (gimplify_init_constructor): For volatile LHS
initialize a temporary.
2010-01-26 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* config/sparc/sparc.c (sparc_elf_asm_named_section): Test for

View File

@ -3684,6 +3684,21 @@ gimplify_init_constructor (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
}
}
/* If the target is volatile and we have non-zero elements
initialize the target from a temporary. */
if (TREE_THIS_VOLATILE (object)
&& !TREE_ADDRESSABLE (type)
&& num_nonzero_elements > 0)
{
tree temp = create_tmp_var (TYPE_MAIN_VARIANT (type), NULL);
TREE_OPERAND (*expr_p, 0) = temp;
*expr_p = build2 (COMPOUND_EXPR, TREE_TYPE (*expr_p),
*expr_p,
build2 (MODIFY_EXPR, void_type_node,
object, temp));
return GS_OK;
}
if (notify_temp_creation)
return GS_OK;

View File

@ -1,3 +1,8 @@
2010-01-31 Richard Guenther <rguenther@suse.de>
PR middle-end/42898
* gcc.dg/torture/pr42898.c: New testcase.
2010-01-31 Paul Thomas <pault@gcc.gnu.org>
PR fortran/38324

View File

@ -0,0 +1,23 @@
/* { dg-do compile } */
/* { dg-options "-fdump-tree-optimized" } */
struct hardware {
int parm1:8;
int :4;
int parm2:4;
int parm3:15;
int parm4:1;
};
void f1(volatile struct hardware *ptr)
{
*ptr=(struct hardware) {
.parm1=42,
.parm2=13,
.parm3=11850,
.parm4=1,
};
}
/* { dg-final { scan-tree-dump-times "\\*ptr" 1 "optimized" } } */
/* { dg-final { cleanup-tree-dump "optimized" } } */