From 366185286aab4ceeb94d98eb54fd9c59708f152a Mon Sep 17 00:00:00 2001 From: Richard Stallman Date: Sun, 18 Jul 1993 18:10:11 +0000 Subject: [PATCH] (common_type): Use TYPE_MAIN_VARIANT when preferring 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 | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 85d2058f900..af934e373e2 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -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. */ -- 2.30.2