(yylex): For floats, Use REAL_VALUES_LESS to distinguish underflow from overflow.
(yylex): For floats, Use REAL_VALUES_LESS to distinguish underflow from overflow. Delete special case for 0.0. From-SVN: r2363
This commit is contained in:
parent
09a99207ea
commit
547ad55772
18
gcc/c-lex.c
18
gcc/c-lex.c
|
@ -1370,24 +1370,10 @@ yylex ()
|
||||||
#ifdef ERANGE
|
#ifdef ERANGE
|
||||||
if (errno == ERANGE && !flag_traditional && pedantic)
|
if (errno == ERANGE && !flag_traditional && pedantic)
|
||||||
{
|
{
|
||||||
char *p1 = token_buffer;
|
|
||||||
/* Check for "0.0" and variants;
|
|
||||||
SunOS 4 spuriously returns ERANGE for them. */
|
|
||||||
while (*p1 == '0') p1++;
|
|
||||||
if (*p1 == '.')
|
|
||||||
{
|
|
||||||
p1++;
|
|
||||||
while (*p1 == '0') p1++;
|
|
||||||
}
|
|
||||||
if (*p1 == 'e' || *p1 == 'E')
|
|
||||||
{
|
|
||||||
/* with significand==0, ignore the exponent */
|
|
||||||
p1++;
|
|
||||||
while (*p1 != 0) p1++;
|
|
||||||
}
|
|
||||||
/* ERANGE is also reported for underflow,
|
/* ERANGE is also reported for underflow,
|
||||||
so test the value to distinguish overflow from that. */
|
so test the value to distinguish overflow from that. */
|
||||||
if (*p1 != 0 && (value > 1.0 || value < -1.0))
|
if (REAL_VALUES_LESS (dconst1, value)
|
||||||
|
|| REAL_VALUES_LESS (value, dconstm1))
|
||||||
{
|
{
|
||||||
pedwarn ("floating point number exceeds range of `double'");
|
pedwarn ("floating point number exceeds range of `double'");
|
||||||
exceeds_double = 1;
|
exceeds_double = 1;
|
||||||
|
|
Loading…
Reference in New Issue