Commit a84b9ee8 by Steven G. Kargl Committed by Jerry DeLisle

re PR fortran/34230 (Expressions of parameters evaluated with too high precision)

2007-11-29  Steven G. Kargl  <kargls@comcast.net>

	PR fortran/34230
	* fortran/arith.c (gfc_check_real_range): Set intermediate values
	to +-Inf and 0 when -fno-range-check is in effect.
	* fortran/invoke.texi: Improve -fno-range-check description.

	PR fortran/34203
	* fortran/invoke.texi: Document the C escaped characters activated
	by -fbackslash.

From-SVN: r130530
parent 04fe2e7b
2007-11-29 Steven G. Kargl <kargls@comcast.net>
PR fortran/34230
* fortran/arith.c (gfc_check_real_range): Set intermediate values
to +-Inf and 0 when -fno-range-check is in effect.
* fortran/invoke.texi: Improve -fno-range-check description.
PR fortran/34203
* fortran/invoke.texi: Document the C escaped characters activated
by -fbackslash.
2007-11-29 Tobias Burnus <burnus@net-b.de> 2007-11-29 Tobias Burnus <burnus@net-b.de>
PR fortran/34248 PR fortran/34248
......
...@@ -348,14 +348,27 @@ gfc_check_real_range (mpfr_t p, int kind) ...@@ -348,14 +348,27 @@ gfc_check_real_range (mpfr_t p, int kind)
else if (mpfr_cmp (q, gfc_real_kinds[i].huge) > 0) else if (mpfr_cmp (q, gfc_real_kinds[i].huge) > 0)
{ {
if (gfc_option.flag_range_check == 0) if (gfc_option.flag_range_check == 0)
retval = ARITH_OK; {
mpfr_set_inf (p, mpfr_sgn (p));
retval = ARITH_OK;
}
else else
retval = ARITH_OVERFLOW; retval = ARITH_OVERFLOW;
} }
else if (mpfr_cmp (q, gfc_real_kinds[i].subnormal) < 0) else if (mpfr_cmp (q, gfc_real_kinds[i].subnormal) < 0)
{ {
if (gfc_option.flag_range_check == 0) if (gfc_option.flag_range_check == 0)
retval = ARITH_OK; {
if (mpfr_sgn (p) < 0)
{
mpfr_set_ui (p, 0, GFC_RND_MODE);
mpfr_set_si (q, -1, GFC_RND_MODE);
mpfr_copysign (p, p, q, GFC_RND_MODE);
}
else
mpfr_set_ui (p, 0, GFC_RND_MODE);
retval = ARITH_OK;
}
else else
retval = ARITH_UNDERFLOW; retval = ARITH_UNDERFLOW;
} }
......
...@@ -239,6 +239,11 @@ Allow @samp{$} as a valid character in a symbol name. ...@@ -239,6 +239,11 @@ Allow @samp{$} as a valid character in a symbol name.
@cindex escape characters @cindex escape characters
Change the interpretation of backslashes in string literals Change the interpretation of backslashes in string literals
from a single backslash character to ``C-style'' escape characters. from a single backslash character to ``C-style'' escape characters.
The following combinations are expanded \a, \b, \f, \n, \r, \t,
\v, \\, and \0 to the ASCII characters alert, backspace, form feed,
newline, carriage return, horizontal tab, vertical tab, backslash,
and NUL, respectively. All other combinations of a character preceded
by \ are unexpanded.
@item -fmodule-private @item -fmodule-private
@opindex @code{fmodule-private} @opindex @code{fmodule-private}
...@@ -303,10 +308,13 @@ in. The option @option{-fopenmp} implies @option{-frecursive}. ...@@ -303,10 +308,13 @@ in. The option @option{-fopenmp} implies @option{-frecursive}.
@item -fno-range-check @item -fno-range-check
@opindex @code{frange-check} @opindex @code{frange-check}
Disable range checking on results of simplification of constant Disable range checking on results of simplification of constant
expressions during compilation. For example, by default, GNU Fortran expressions during compilation. For example, GNU Fortran will give
will give an overflow error at compile time when simplifying @code{a = an error at compile time when simplifying @code{a = 1. / 0}.
EXP(1000)}. With @option{-fno-range-check}, no error will be given and With this option, no error will be given and @code{a} will be assigned
the variable @code{a} will be assigned the value @code{+Infinity}. the value @code{+Infinity}. If an expression evaluates to a value
outside of the relevant range of [@code{-HUGE()}:@code{HUGE()}],
then the expression will be replaced by @code{-Inf} or @code{+Inf}
as appropriate.
Similarly, @code{DATA i/Z'FFFFFFFF'/} will result in an integer overflow Similarly, @code{DATA i/Z'FFFFFFFF'/} will result in an integer overflow
on most systems, but with @option{-fno-range-check} the value will on most systems, but with @option{-fno-range-check} the value will
``wrap around'' and @code{i} will be initialized to @math{-1} instead. ``wrap around'' and @code{i} will be initialized to @math{-1} instead.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment