OSDN Git Service

(expand_expr, case CONVERT_EXPR): If changing signedness and we have a
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 8 Jul 1994 22:22:46 +0000 (22:22 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 8 Jul 1994 22:22:46 +0000 (22:22 +0000)
promoted SUBREG, clear the promotion flag.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@7686 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/expr.c

index d9fe560..5dfc879 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)
        {