From f59700f9057fd29d8fdcee25efad69e8d9a54dce Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Thu, 22 May 2003 20:31:46 +0000 Subject: [PATCH] expr.c (expand_expr, [...]): Put into memory if constant and EXPAND_CONST_ADDRESS, not just EXPAND_INITIALIZER. * expr.c (expand_expr, case CONSTRUCTOR): Put into memory if constant and EXPAND_CONST_ADDRESS, not just EXPAND_INITIALIZER. From-SVN: r67098 --- gcc/ChangeLog | 3 +++ gcc/expr.c | 15 +++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index db4804b3196..d04de886070 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -2,6 +2,9 @@ * c-decl.c (duplicate_decls): Test DECL for ERROR_MARK. + * expr.c (expand_expr, case CONSTRUCTOR): Put into memory if + constant and EXPAND_CONST_ADDRESS, not just EXPAND_INITIALIZER. + 2003-05-22 Kaveh R. Ghazi * m68hc11.c: Don't use the `0' flag for asm_fprintf specifiers. diff --git a/gcc/expr.c b/gcc/expr.c index 9c21ac9a3a7..770bef4afa2 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -4982,7 +4982,7 @@ store_constructor (exp, target, cleared, size) { rtx offset_rtx; - if (contains_placeholder_p (offset)) + if (CONTAINS_PLACEHOLDER_P (offset)) offset = build (WITH_RECORD_EXPR, sizetype, offset, make_tree (TREE_TYPE (exp), target)); @@ -5799,8 +5799,7 @@ get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode, made during type construction. */ if (this_offset == 0) break; - else if (! TREE_CONSTANT (this_offset) - && contains_placeholder_p (this_offset)) + else if (CONTAINS_PLACEHOLDER_P (this_offset)) this_offset = build (WITH_RECORD_EXPR, sizetype, this_offset, exp); offset = size_binop (PLUS_EXPR, offset, this_offset); @@ -5830,11 +5829,9 @@ get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode, /* If the index has a self-referential type, pass it to a WITH_RECORD_EXPR; if the component size is, pass our component to one. */ - if (! TREE_CONSTANT (index) - && contains_placeholder_p (index)) + if (CONTAINS_PLACEHOLDER_P (index)) index = build (WITH_RECORD_EXPR, TREE_TYPE (index), index, exp); - if (! TREE_CONSTANT (unit_size) - && contains_placeholder_p (unit_size)) + if (CONTAINS_PLACEHOLDER_P (unit_size)) unit_size = build (WITH_RECORD_EXPR, sizetype, unit_size, array); offset = size_binop (PLUS_EXPR, offset, @@ -7163,7 +7160,9 @@ expand_expr (exp, target, tmode, modifier) && ((TREE_CODE (type) == VECTOR_TYPE && !is_zeros_p (exp)) || ! mostly_zeros_p (exp))))) - || (modifier == EXPAND_INITIALIZER && TREE_CONSTANT (exp))) + || ((modifier == EXPAND_INITIALIZER + || modifier == EXPAND_CONST_ADDRESS) + && TREE_CONSTANT (exp))) { rtx constructor = output_constant_def (exp, 1); -- 2.30.2