(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
This commit is contained in:
Richard Stallman 1993-07-18 18:10:11 +00:00
parent edbc355b88
commit 366185286a
1 changed files with 7 additions and 5 deletions

View 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. */