diff options
author | gavin <gavin@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-03-16 08:33:24 +0000 |
---|---|---|
committer | gavin <gavin@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-03-16 08:33:24 +0000 |
commit | 368b23834268addc37d78be50295bff45331cccf (patch) | |
tree | f5ac52146a9858758c4f6fa86da80d1c345b30d7 /gcc | |
parent | 824ab36c58becdd02187fc7404ce98b875a596dd (diff) | |
download | ppe42-gcc-368b23834268addc37d78be50295bff45331cccf.tar.gz ppe42-gcc-368b23834268addc37d78be50295bff45331cccf.zip |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@25800 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c-lex.c | 28 |
2 files changed, 21 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 17955b8f6bd..f9caaace14e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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> * invoke.texi: Add -mlong32 documentation. diff --git a/gcc/c-lex.c b/gcc/c-lex.c index 8f63b2db7dc..be366fae83e 100644 --- a/gcc/c-lex.c +++ b/gcc/c-lex.c @@ -1698,20 +1698,10 @@ yylex () c = GETC(); } - /* If the constant won't fit in the targets widest int, - or it won't fit in the host's representation for ints, - 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 + /* If it won't fit in the host's representation for integers, + then pedwarn. */ warn = overflow; - for (i = bytes; i < TOTAL_PARTS; i++) - if (parts[i]) - warn = 1; if (warn) pedwarn ("integer constant out of range"); @@ -1802,7 +1792,10 @@ yylex () if (pedantic && !flag_traditional && !spec_long_long && !warn && (TYPE_PRECISION (long_integer_type_node) < 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)) warning ("decimal constant is so large that it is unsigned"); @@ -1830,6 +1823,15 @@ yylex () } else 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); |