Print

Print


Hi,

On Nov 28, 2011, at 14:03 , Neil N. Carlson wrote:
> 
> I'm not actually surprised that the argument expression
> was fully evaluated; that would be required if
> merge were a user-function.  Do intrinsic functions
> have special rules in this regard?

No.
> 
> That got me to wondering why this bit of code doesn't
> cause any problems with the other compilers we use,
> which do trap on fp exceptions by default.  Poking
> around with the nag compiler, I've found that it
> compiles the merge to a loop that only evaluates those
> elements of the array expression that are used, and
> so never tries to do a 1.0/0.0.  I'd guess that the
> other compilers are doing the same thing.

Yes.
> 
> I actually prefer this behavior (in this case at least),
> but I'm suspicious that this may not be strictly kosher.

It isn't.

This has been discussed at length in J3/WG5 meetings.
The difficulty is that expression evaluation goes to the heart
of a compiler's optimizations.  Thus, changes to the standard
in this area must be made carefully.

There was a proposal for f08 to add a "chooser" feature,
which would satisfy the don't-evaluate-this-yet desire.
But no one design emerged as clearly best, and there was a lack
of time and people to fully explore things.

IIRC, the two designs were a pseudo-function and a pseudo-operator.
Neither could be seen as clearly better than the other.

-- 
Cheers!

Dan Nagle