This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug fortran/33296] nearest(huge(1.0),1.0) gives an error

------- 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]