J3/04-296
To: J3
From: Malcolm Cohen
Subject: Interp 78 answer
Date: 4th May 2004
----------------------------------------------------------------------
NUMBER: 000078
TITLE: Resolving generic procedure references
KEYWORDS: INTENT(IN), NULLIFY
DEFECT TYPE:
STATUS: J3 consideration in progress
QUESTION:
14.1.2.4 (Resolving procedure references) seems to fail to resolve
the following example.
Consider:
INTERFACE sin
CHARACTER FUNCTION sinch(c)
CHARACTER,INTENT(IN) :: c
END
END INTERFACE
PRINT *,sin(3.5) ! Reference to which procedure?
END
According to rule (1)(a), SIN is established to be generic; thus
references are resolved by the rules in 14.1.2.4.1.
In 14.1.2.4.1:
Rule (1) fails - the reference is not consistent with any
specific interface in the interface block for SIN.
Rule (2) fails for the same reason.
Rule (3) fails because there is no INTRINSIC statement.
Rule (4) fails because there is no host scoping unit.
Is this program legal?
How should the reference to the generic procedure be resolved?
ANSWER:
This program was intended to be valid.
The reference is to the intrinsic SIN.
An edit is supplied to clarify this.
DISCUSSION:
(1) INTERFACE OPERATOR(+) does not hide the intrinsic operator.
(2) CHARACTER SIN does not hide the intrinsic function.
Given that, it would seem perverse for
INTERFACE SIN
to completely block the intrinsic.
Furthermore, it is clear from the original version of Fortran 90 that
a user generic was not intended to hide the intrinsic. This text was
modified by interpretation F90/000083 which allowed the user to
override an intrinsic function by providing a specific function with
the same argument characteristics. The failure of the current
14.1.2.4.1 to resolve the above example was an inadvertant side-effect
of that change.
EDIT:
[279:36+] Append new paragraph
"If (1), (2), (3) and (4) do not apply, the name is that of an
intrinsic procedure, and the reference is consistent with the
interface of that intrinsic procedure, then the reference is to that
intrinsic procedure."
SUBMITTED BY: Malcolm Cohen
HISTORY: 99-202 m150 submitted
04-296 m168 answer drafted
----------------------------------------------------------------------