(common_type): Use TYPE_MAIN_VARIANT when preferring
authorRichard Stallman <rms@gnu.org>
Sun, 18 Jul 1993 18:10:11 +0000 (18:10 +0000)
committerRichard Stallman <rms@gnu.org>
Sun, 18 Jul 1993 18:10:11 +0000 (18:10 +0000)
long int to int (when width is the same).

(check_format): With -Wformat, warn about
printf("%ld", 1) even if sizeof (int) == sizeof (long),
since the code isn't portable.  Similarly for "%d" vs 1L.

(convert_arguments) [PROMOTE_PROTOTYPES]:
With -Wconversion, use unpromoted type to check for signedness changes.

From-SVN: r4935

gcc/c-typeck.c

index 85d2058f9005328cf3a1735e4d4ba5a4340f6b53..af934e373e2b40ea5548cdf0cdbe274667d257b8 100644 (file)
@@ -231,12 +231,12 @@ common_type (t1, t2)
 
       /* Same precision.  Prefer longs to ints even when same size.  */
 
-      if (t1 == long_unsigned_type_node
-         || t2 == long_unsigned_type_node)
+      if (TYPE_MAIN_VARIANT (t1) == long_unsigned_type_node
+         || TYPE_MAIN_VARIANT (t2) == long_unsigned_type_node)
        return long_unsigned_type_node;
 
-      if (t1 == long_integer_type_node
-         || t2 == long_integer_type_node)
+      if (TYPE_MAIN_VARIANT (t1) == long_integer_type_node
+         || TYPE_MAIN_VARIANT (t2) == long_integer_type_node)
        {
          /* But preserve unsignedness from the other type,
             since long cannot hold all the values of an unsigned int.  */
@@ -1787,7 +1787,8 @@ check_format (info, params)
          /* Don't warn about differences merely in signedness.  */
          && !(TREE_CODE (wanted_type) == INTEGER_TYPE
               && TREE_CODE (cur_type) == INTEGER_TYPE
-              && TYPE_PRECISION (wanted_type) == TYPE_PRECISION (cur_type)))
+              && (wanted_type == (TREE_UNSIGNED (wanted_type)
+                                  ? unsigned_type : signed_type) (cur_type))))
        {
          register char *this;
          register char *that;
@@ -1998,6 +1999,7 @@ convert_arguments (typelist, values, name, fundecl)
          else
            {
              tree parmname;
+             tree type0 = type;
 #ifdef PROMOTE_PROTOTYPES
              /* Rather than truncating and then reextending,
                 convert directly to int, if that's the type we will want.  */