[Bug fortran/33296] nearest(huge(1.0),1.0) gives an error
fxcoudert at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Tue Sep 11 09:55:00 GMT 2007
------- Comment #7 from fxcoudert at gcc dot gnu dot org 2007-09-11 09:55 -------
(In reply to comment #6)
> Why? more precisely what are the rules behind this yes?
Short answer: the statements are treated independently in the front-end.
When the front-end sees: "nearest(huge(1.0),1.0)", it parses the expression and
then tries to simplify it. huge(1.0) will be replaced by its value, and the
"nearest(xxxxxxx,1.0)" is simplified. (At that point, the front-end detects the
overflow and errors out.)
Normally, the inter-statement optimization is to be done by the middle-end. You
will find that the following code:
x = 2.
x = sqrt(x)
you will find that sqrt() is calculated at runtime for -O0, while the two
statements are simplified (and sqrt(2.) is precomputed at compile-time) at -O1.
For NEAREST, the middle-end doesn't perform the simplification because instead
of translating the Fortran statement into C99 functions directly, we use call
the libgfortran function gfortran_nearest_r4(), which the middle-end doesn't
know and can't optimized away. (Doing so is a missed optimization, now filed as
PR33387.)
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33296
More information about the Gcc-bugs
mailing list