Commit a38578e1 by Mark Mitchell Committed by Mark Mitchell

re PR c++/23167 (internal compiler error: in create_tmp_var)

	PR c++/23167
	* gimplify.c (gimplify_expr): Handle TREE_ADDRESSABLE types when
	generating synthetic loads from volatile lvalues.

	PR c++/23167
	* g++.dg/expr/volatile1.C: New test.

From-SVN: r103782
parent ebf178cd
2005-08-31 Mark Mitchell <mark@codesourcery.com>
PR c++/23167
* gimplify.c (gimplify_expr): Handle TREE_ADDRESSABLE types when
generating synthetic loads from volatile lvalues.
005-09-02 Nick Clifton <nickc@redhat.com>
* config/stormy16/stormy16-lib2.c (__popcounthi2, __parityhi2,
......
......@@ -4454,7 +4454,15 @@ gimplify_expr (tree *expr_p, tree *pre_p, tree *post_p,
/* Historically, the compiler has treated a bare
reference to a volatile lvalue as forcing a load. */
tree type = TYPE_MAIN_VARIANT (TREE_TYPE (*expr_p));
tree tmp = create_tmp_var (type, "vol");
/* Normally, we do want to create a temporary for a
TREE_ADDRESSABLE type because such a type should not be
copied by bitwise-assignment. However, we make an
exception here, as all we are doing here is ensuring that
we read the bytes that make up the type. We use
create_tmp_var_raw because create_tmp_var will abort when
given a TREE_ADDRESSSABLE type. */
tree tmp = create_tmp_var_raw (type, "vol");
gimple_add_tmp_var (tmp);
*expr_p = build (MODIFY_EXPR, type, tmp, *expr_p);
}
else
......
2005-08-31 Mark Mitchell <mark@codesourcery.com>
PR c++/23167
* g++.dg/expr/volatile1.C: New test.
2005-09-02 Andrew Pinski <pinskia@physics.uc.edu>
PR middle-end/23547
// PR c++/23167
struct dom
{
static int tostr();
void eval_old() volatile{tostr();}
~dom() throw();
};
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