From 0d15e60cd56057d72005c7fff060d387cc894fc3 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Sat, 4 Jan 1997 22:21:00 -0500 Subject: [PATCH] (get_inner_reference): Fix type error. (expand_expr, case COMPONENT_REF): Don't convert if modifier is EXPAND_CONST_ADDRESS, EXPAND_SUM, or EXPAND_INITIALIZER. From-SVN: r13375 --- gcc/expr.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/gcc/expr.c b/gcc/expr.c index e4c66095c42..eeed0b08c30 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -4304,7 +4304,8 @@ get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode, } index = fold (build (MULT_EXPR, index_type, index, - TYPE_SIZE (TREE_TYPE (exp)))); + convert (index_type, + TYPE_SIZE (TREE_TYPE (exp))))); if (TREE_CODE (index) == INTEGER_CST && TREE_INT_CST_HIGH (index) == 0) @@ -5670,10 +5671,13 @@ expand_expr (exp, target, tmode, modifier) MEM_IN_STRUCT_P (op0) = 1; MEM_VOLATILE_P (op0) |= volatilep; - if (mode == mode1 || mode1 == BLKmode || mode1 == tmode) + if (mode == mode1 || mode1 == BLKmode || mode1 == tmode + || modifier == EXPAND_CONST_ADDRESS || modifier == EXPAND_SUM + || modifier == EXPAND_INITIALIZER) return op0; - if (target == 0) + else if (target == 0) target = gen_reg_rtx (tmode != VOIDmode ? tmode : mode); + convert_move (target, op0, unsignedp); return target; } -- 2.30.2