c-lex.c (yylex): Remove warning for integer literals being larger than the largest target int.
* c-lex.c (yylex) : Remove warning for integer literals being larger than the largest target int. Add warning for integer literal being larger than than its choosen type. From-SVN: r25800
This commit is contained in:
parent
3ce1ba83d6
commit
0e0fda0dd2
@ -1,3 +1,9 @@
|
|||||||
|
Tue Mar 16 11:30:19 1999 Gavin Romig-Koch <gavin@cygnus.com>
|
||||||
|
|
||||||
|
* c-lex.c (yylex) : Remove warning for integer literals being
|
||||||
|
larger than the largest target int. Add warning for integer
|
||||||
|
literal being larger than than its choosen type.
|
||||||
|
|
||||||
Tue Mar 16 10:53:17 1999 Gavin Romig-Koch <gavin@cygnus.com>
|
Tue Mar 16 10:53:17 1999 Gavin Romig-Koch <gavin@cygnus.com>
|
||||||
|
|
||||||
* invoke.texi: Add -mlong32 documentation.
|
* invoke.texi: Add -mlong32 documentation.
|
||||||
|
28
gcc/c-lex.c
28
gcc/c-lex.c
@ -1698,20 +1698,10 @@ yylex ()
|
|||||||
c = GETC();
|
c = GETC();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If the constant won't fit in the targets widest int,
|
/* If it won't fit in the host's representation for integers,
|
||||||
or it won't fit in the host's representation for ints,
|
then pedwarn. */
|
||||||
then warn that the constant is out of range. */
|
|
||||||
|
|
||||||
#if HOST_BITS_PER_WIDE_INT >= 64
|
|
||||||
bytes = TYPE_PRECISION (intTI_type_node) / HOST_BITS_PER_CHAR;
|
|
||||||
#else
|
|
||||||
bytes = TYPE_PRECISION (intDI_type_node) / HOST_BITS_PER_CHAR;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
warn = overflow;
|
warn = overflow;
|
||||||
for (i = bytes; i < TOTAL_PARTS; i++)
|
|
||||||
if (parts[i])
|
|
||||||
warn = 1;
|
|
||||||
if (warn)
|
if (warn)
|
||||||
pedwarn ("integer constant out of range");
|
pedwarn ("integer constant out of range");
|
||||||
|
|
||||||
@ -1802,7 +1792,10 @@ yylex ()
|
|||||||
if (pedantic && !flag_traditional && !spec_long_long && !warn
|
if (pedantic && !flag_traditional && !spec_long_long && !warn
|
||||||
&& (TYPE_PRECISION (long_integer_type_node)
|
&& (TYPE_PRECISION (long_integer_type_node)
|
||||||
< TYPE_PRECISION (type)))
|
< TYPE_PRECISION (type)))
|
||||||
pedwarn ("integer constant out of range");
|
{
|
||||||
|
warn = 1;
|
||||||
|
pedwarn ("integer constant out of range");
|
||||||
|
}
|
||||||
|
|
||||||
if (base == 10 && ! spec_unsigned && TREE_UNSIGNED (type))
|
if (base == 10 && ! spec_unsigned && TREE_UNSIGNED (type))
|
||||||
warning ("decimal constant is so large that it is unsigned");
|
warning ("decimal constant is so large that it is unsigned");
|
||||||
@ -1830,6 +1823,15 @@ yylex ()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
TREE_TYPE (yylval.ttype) = type;
|
TREE_TYPE (yylval.ttype) = type;
|
||||||
|
|
||||||
|
|
||||||
|
/* If it's still an integer (not a complex), and it doesn't
|
||||||
|
fit in the type we choose for it, then pedwarn. */
|
||||||
|
|
||||||
|
if (! warn
|
||||||
|
&& TREE_CODE (TREE_TYPE (yylval.ttype)) == INTEGER_TYPE
|
||||||
|
&& ! int_fits_type_p (yylval.ttype, TREE_TYPE (yylval.ttype)))
|
||||||
|
pedwarn ("integer constant out of range");
|
||||||
}
|
}
|
||||||
|
|
||||||
UNGETC (c);
|
UNGETC (c);
|
||||||
|
Loading…
Reference in New Issue
Block a user