[Bug fortran/47710] [OOP] Improve ambiguity check for TBP

burnus at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Sat Feb 12 10:05:00 GMT 2011


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47710

--- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> 2011-02-12 09:47:53 UTC ---
The first example is rejected by ifort (12.0? with a warning - but works) and
NAG (5.1, 5.2? - error); crayftn and gfortran accept it.
The second example by Janus is accepted by gfortran, NAG 5.1 (both call
baseproc1) and by Crayftn (calls baseproc2) - I have not checked with ifort 12
(ifort 11.1 does not support TBP GENERIC).
(Both programs are rejected by PGI 10.5 at a different place which looks like a
compiler bug.)

 * * *

In Fortran 2008, this is covered by C1215 in "12.4.3.4.5 Restrictions on
generic declarations".

To valid, a program needs to fulfil one of the items (1) to (3); I agree with
Richard Maine that the following should be fulfilled for the first program:

"(1) there is a non-passed-object dummy data object in one or the
 other of them such that
    (a) the number of dummy data objects in one that are nonoptional,
        are not passed-object, and with which that dummy data object is TKR
        compatible, possibly including that dummy data object itself,
    exceeds
    (b) the number of non-passed-object dummy data objects, both optional
        and nonoptional, in the other that are not distinguishable from
        that dummy data object,"

"baseproc_nopass" has *one* nonoptional "non-passed-object dummy" this exceeds
the number of "non-passed-object dummy data objects" of "baseproc_pass", which
has no non-passed-object dummy. Hence, the program should be valid.

For Janus's program, both have exactly the same number of non-passed-object
dummies: Namely one. "(2)" does not apply as only one has "pass" and "(3)" also
does not seem to be fulfilable. Hence, the program should be invalid.



More information about the Gcc-bugs mailing list