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
This commit is contained in:
Mark Mitchell 2005-09-02 15:39:04 +00:00 committed by Mark Mitchell
parent ebf178cd33
commit a38578e1bb
4 changed files with 29 additions and 1 deletions

View File

@ -1,3 +1,9 @@
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,

View File

@ -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

View File

@ -1,3 +1,8 @@
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

View File

@ -0,0 +1,9 @@
// PR c++/23167
struct dom
{
static int tostr();
void eval_old() volatile{tostr();}
~dom() throw();
};