gimplify.c (eval_save_expr): New.

* gimplify.c (eval_save_expr): New.
        (gimplify_one_sizepos): Use it.
        * stor-layout.c (layout_type): Unshare TYPE_MIN/MAX_VALUE.

From-SVN: r92468
This commit is contained in:
Richard Henderson 2004-12-21 11:27:08 -08:00 committed by Richard Henderson
parent 1126bfdd6b
commit b4830636f8
3 changed files with 28 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2004-12-21 Richard Henderson <rth@redhat.com>
* gimplify.c (eval_save_expr): New.
(gimplify_one_sizepos): Use it.
* stor-layout.c (layout_type): Unshare TYPE_MIN/MAX_VALUE.
2004-12-21 Nathan Sidwell <nathan@codesourcery.com>
* system.c (IN_RANGE): Use plain unsigned, not unsigned

View File

@ -4217,7 +4217,25 @@ gimplify_type_sizes (tree type, tree *list_p)
gimplify_one_sizepos (&TYPE_SIZE_UNIT (type), list_p);
}
/* Subroutine of the above to gimplify one size or position, *EXPR_P.
/* A subroutine of gimplify_one_sizepos, called via walk_tree. Evaluate
the expression if it's a SAVE_EXPR and add it to the statement list
in DATA. */
static tree
eval_save_expr (tree *tp, int *walk_subtrees, void *data)
{
if (TREE_CODE (*tp) == SAVE_EXPR)
{
*walk_subtrees = 0;
gimplify_and_add (*tp, (tree *) data);
}
else if (TYPE_P (*tp) || DECL_P (*tp))
*walk_subtrees = 0;
return NULL;
}
/* A subroutine of gimplify_type_sizes to make sure that *EXPR_P,
a size or position, has had all of its SAVE_EXPRs evaluated.
We add any required statements to STMT_P. */
void
@ -4233,7 +4251,7 @@ gimplify_one_sizepos (tree *expr_p, tree *stmt_p)
|| CONTAINS_PLACEHOLDER_P (*expr_p))
return;
gimplify_expr (expr_p, stmt_p, NULL, is_gimple_val, fb_rvalue);
walk_tree (expr_p, eval_save_expr, stmt_p, NULL);
}
#ifdef ENABLE_CHECKING

View File

@ -1644,8 +1644,8 @@ layout_type (tree type)
if (index && TYPE_MAX_VALUE (index) && TYPE_MIN_VALUE (index)
&& TYPE_SIZE (element))
{
tree ub = TYPE_MAX_VALUE (index);
tree lb = TYPE_MIN_VALUE (index);
tree ub = unshare_expr (TYPE_MAX_VALUE (index));
tree lb = unshare_expr (TYPE_MIN_VALUE (index));
tree length;
tree element_size;