diff options
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/expr.c b/gcc/expr.c index 79a039a529f..300b63d8816 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -4654,7 +4654,8 @@ store_expr (tree exp, rtx target, int call_param_p, bool nontemporal) temp = convert_to_mode (GET_MODE (target), temp, unsignedp); emit_move_insn (target, temp); } - else if (GET_MODE (target) == BLKmode) + else if (GET_MODE (target) == BLKmode + || GET_MODE (temp) == BLKmode) emit_block_move (target, temp, expr_size (exp), (call_param_p ? BLOCK_OP_CALL_PARM @@ -5893,7 +5894,8 @@ get_inner_reference (tree exp, HOST_WIDE_INT *pbitsize, else if (TREE_CODE (exp) == BIT_FIELD_REF) { size_tree = TREE_OPERAND (exp, 1); - *punsignedp = BIT_FIELD_REF_UNSIGNED (exp); + *punsignedp = (! INTEGRAL_TYPE_P (TREE_TYPE (exp)) + || TYPE_UNSIGNED (TREE_TYPE (exp))); /* For vector types, with the correct size of access, use the mode of inner type. */ |