[J3] finalization and submodule
Jeff Hammond
jehammond at nvidia.com
Sun May 7 06:16:37 UTC 2023
Cray Fortran 15.0.0 also compiles the code in question without incident.
Jeff
> On 7. May 2023, at 9.14, Robert Corbett via J3 <j3 at mailman.j3-fortran.org> wrote:
>
> External email: Use caution opening links or attachments
>
>
> I am no longer a member of the committee, so my opinion is only my opinion. I agree with the argument given that the program shown is standard conformant. I do not see any difficulty with implementing the behavior implied by the program. Intel’s implementation is evidence that it can be implemented.
>
> Bob Corbett
>
>> On May 6, 2023, at 10:49 PM, Steven G. Kargl via J3 <j3 at mailman.j3-fortran.org> wrote:
>>
>> Is the Fortran code or invalid? Where are the instructions
>> for writing an official interpretation request?
>>
>> --
>> steve
>>
>>> On Thu, May 04, 2023 at 11:59:50AM -0700, Steven G. Kargl via J3 wrote:
>>> All,
>>>
>>> I have a question about finalization and submodules that is
>>> sparked by https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97122
>>> The code in question is
>>>
>>> MODULE m
>>> IMPLICIT NONE
>>> INTERFACE
>>> MODULE SUBROUTINE other
>>> IMPLICIT NONE
>>> END SUBROUTINE other
>>> END INTERFACE
>>> END MODULE m
>>>
>>> SUBMODULE (m) s
>>> IMPLICIT NONE
>>> TYPE :: t
>>> CONTAINS
>>> FINAL :: p
>>> END TYPE t
>>> CONTAINS
>>> SUBROUTINE p(arg)
>>> TYPE(t), INTENT(INOUT) :: arg
>>> END SUBROUTINE p
>>>
>>> MODULE SUBROUTINE other
>>> END SUBROUTINE other
>>> END SUBMODULE s
>>>
>>> According to the bug report, gfortran and nagfor reject the code
>>> with an error message of the form
>>>
>>> "Error: pr97122.f90, line 14: Type T has final subroutines
>>> but is not defined in the specification part of a module"
>>>
>>> Intel's ifort compiles the code.
>>>
>>> Using 22-077r1 (22 Apr 22), I can find
>>>
>>> C791 (R753) A final-subroutine-name shall be the name of a module
>>> procedure with exactly one dummy argument. That argument shall be
>>> nonoptional and shall be a noncoarray, nonpointer, nonallocatable,
>>> nonpolymorphic variable of the derived type being defined. All
>>> length type parameters of the dummy argument shall be assumed.
>>> The dummy argument shall not have the INTENT (OUT) or VALUE
>>> attribute.
>>>
>>> 3.112.4
>>> module procedure
>>> procedure defined by a module subprogram, or ...
>>>
>>> 3.143.3
>>> module subprogram
>>> subprogram that is contained in a module or submodule but is not
>>> an internal subprogram
>>>
>>>
>>> 14.2.3 Submodules
>>> ...
>>> 3 A submodule may provide implementations for separate module procedures
>>> (15.6.2.5), each of which is declared (15.4.3.2) within that submodule
>>> or one of its ancestors, and declarations and definitions of other
>>> entities that are accessible by host association in its descendants.
>>>
>>> AFAIC, 'subroutine p(arg)' meets at the requirement for finalization.
>>> I admit that I may have missed something in chasing 'module procedure'
>>> through 22-007r1.
>>>
>>> So, the question are
>>> 'Are gfortran and nagfor correct in rejecting the code?'
>>> 'Does have Intel's ifort have bug?'
>>> 'Does the Fortran standard need be refined to explicitly
>>> state that derived type with a final statement can only
>>> appear in the specification part of a module?'
>>>
>>> --
>>> Steve
>>
>>
>>
>> --
>> Steve
>
More information about the J3
mailing list