(expand_expr, case CONVERT_EXPR): If changing signedness and we have a
authorRichard Kenner <kenner@gcc.gnu.org>
Fri, 8 Jul 1994 22:22:46 +0000 (18:22 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Fri, 8 Jul 1994 22:22:46 +0000 (18:22 -0400)
promoted SUBREG, clear the promotion flag.

From-SVN: r7686

gcc/expr.c

index d9fe56030c73d5f923448d2ba97426af7a3062c2..5dfc87913390f7ec2d2a41603a1330dd3a3fb5bc 100644 (file)
@@ -4699,7 +4699,19 @@ expand_expr (exp, target, tmode, modifier)
     case CONVERT_EXPR:
     case REFERENCE_EXPR:
       if (mode == TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0))))
-       return expand_expr (TREE_OPERAND (exp, 0), target, VOIDmode, modifier);
+       {
+         op0 = expand_expr (TREE_OPERAND (exp, 0), target, VOIDmode,
+                            modifier);
+
+         /* If the signedness of the conversion differs and OP0 is
+            a promoted SUBREG, clear that indication since we now
+            have to do the proper extension.  */
+         if (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0))) != unsignedp
+             && GET_CODE (op0) == SUBREG)
+           SUBREG_PROMOTED_VAR_P (op0) = 0;
+
+         return op0;
+       }
 
       if (TREE_CODE (type) == UNION_TYPE)
        {