Commit 406d3663 by Richard Biener Committed by Paolo Carlini

re PR c++/56961 (stack overflow in gimplifier with volatile field)

/cp
2014-06-05  Richard Biener  <rguenther@suse.de>
	    Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/56961
	* cp-gimplify.c (cp_gimplify_expr, [MODIFY_EXPR]): Rework
	handling of empty classes.

/testsuite
2014-06-05  Richard Biener  <rguenther@suse.de>
	    Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/56961
	* g++.dg/parse/pr56961.C: New.

Co-Authored-By: Paolo Carlini <paolo.carlini@oracle.com>

From-SVN: r211286
parent da4e26be
2014-06-05 Richard Biener <rguenther@suse.de>
Paolo Carlini <paolo.carlini@oracle.com>
PR c++/56961
* cp-gimplify.c (cp_gimplify_expr, [MODIFY_EXPR]): Rework
handling of empty classes.
2014-06-04 Jason Merrill <jason@redhat.com>
* parser.c (cp_parser_diagnose_invalid_type_name): Give helpful note
......
......@@ -629,19 +629,12 @@ cp_gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p)
Also drop volatile variables on the RHS to avoid infinite
recursion from gimplify_expr trying to load the value. */
if (!TREE_SIDE_EFFECTS (op1)
|| (DECL_P (op1) && TREE_THIS_VOLATILE (op1)))
if (!TREE_SIDE_EFFECTS (op1))
*expr_p = op0;
else if (TREE_CODE (op1) == MEM_REF
&& TREE_THIS_VOLATILE (op1))
{
/* Similarly for volatile MEM_REFs on the RHS. */
if (!TREE_SIDE_EFFECTS (TREE_OPERAND (op1, 0)))
*expr_p = op0;
else
*expr_p = build2 (COMPOUND_EXPR, TREE_TYPE (*expr_p),
TREE_OPERAND (op1, 0), op0);
}
else if (TREE_THIS_VOLATILE (op1)
&& (REFERENCE_CLASS_P (op1) || DECL_P (op1)))
*expr_p = build2 (COMPOUND_EXPR, TREE_TYPE (*expr_p),
build_fold_addr_expr (op1), op0);
else
*expr_p = build2 (COMPOUND_EXPR, TREE_TYPE (*expr_p),
op0, op1);
......
2014-06-05 Richard Biener <rguenther@suse.de>
Paolo Carlini <paolo.carlini@oracle.com>
PR c++/56961
* g++.dg/parse/pr56961.C: New.
2014-06-05 Kai Tietz <ktietz@redhat.com>
PR target/46219
......
// PR c++/56961
struct foo { };
typedef struct
{
volatile foo fields;
} CSPHandleState;
CSPHandleState a;
void fn1 ()
{
CSPHandleState b;
b.fields = foo(); // { dg-error "discards qualifiers" }
}
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