diff options
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 15 |
1 files changed, 7 insertions, 8 deletions
@@ -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); |