(pointer_int_sum): Convert integer to both signedness and precision of
authorRichard Kenner <kenner@gcc.gnu.org>
Tue, 18 Jun 1996 10:32:43 +0000 (06:32 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Tue, 18 Jun 1996 10:32:43 +0000 (06:32 -0400)
sizetype.

From-SVN: r12291

gcc/c-typeck.c

index 06ef49319860b489fc9500804631a9625fae8e6e..d2abd72904295fe6456ce85864c409ff8182e327 100644 (file)
@@ -2649,8 +2649,10 @@ pointer_int_sum (resultcode, ptrop, intop)
   /* Convert the integer argument to a type the same size as sizetype
      so the multiply won't overflow spuriously.  */
 
-  if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype))
-    intop = convert (type_for_size (TYPE_PRECISION (sizetype), 0), intop);
+  if (TYPE_PRECISION (TREE_TYPE (intop)) != TYPE_PRECISION (sizetype)
+      || TREE_UNSIGNED (TREE_TYPE (intop)) != TREE_UNSIGNED (sizetype))
+    intop = convert (type_for_size (TYPE_PRECISION (sizetype), 
+                                   TREE_UNSIGNED (sizetype)), intop);
 
   /* Replace the integer argument with a suitable product by the object size.
      Do this multiplication as signed, then convert to the appropriate