- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Fyi to readers on a support incident submitted at the Intel Online Service Center: Intel Fortran compiler 18.0 Update 2 generates an invalid error for the following code involving a generic interface to a subprogram with the MODULE keyword.
C:\Temp>type m.f90 module m interface module subroutine sub() end subroutine sub end interface interface genfoo module subroutine foo( k ) integer, intent(in) :: k(:) end subroutine end interface end module submodule(m) sm contains module subroutine sub() integer :: k(1) call genfoo( k ) end subroutine sub module subroutine foo( k ) integer, intent(in) :: k(:) print *, k end subroutine foo end submodule C:\Temp>ifort /standard-semantics /warn:all /stand m.f90 Intel(R) Visual Fortran Intel(R) 64 Compiler for applications running on Intel(R ) 64, Version 18.0.2.185 Build 20180210 Copyright (C) 1985-2018 Intel Corporation. All rights reserved. m.f90(16): error #6285: There is no matching specific subroutine for this generi c subroutine call. [GENFOO] call genfoo( k ) -----------^ compilation aborted for m.f90 (code 1) C:\Temp>
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
FF,
What happens if you separate the module and submodule into two files (and make the submodule dependent on the module).?
Jim Dempsey
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
jimdempseyatthecove wrote:
FF,
What happens if you separate the module and submodule into two files (and make the submodule dependent on the module).?
Jim Dempsey
Jim,
Thanks for your interest. Per the output information shown below, separating the two program units into separate files doesn't make a difference i.e., assuming I understood your question correctly:
C:\Temp>type m.f90 module m interface module subroutine sub() end subroutine sub end interface interface genfoo module subroutine foo( k ) integer, intent(in) :: k(:) end subroutine end interface end module C:\Temp>ifort /c /standard-semantics /warn:all /stand m.f90 Intel(R) Visual Fortran Intel(R) 64 Compiler for applications running on Intel(R ) 64, Version 18.0.2.185 Build 20180210 Copyright (C) 1985-2018 Intel Corporation. All rights reserved. C:\Temp>type sm.f90 submodule(m) sm contains module subroutine sub() integer :: k(1) call genfoo( k ) end subroutine sub module subroutine foo( k ) integer, intent(in) :: k(:) print *, k end subroutine foo end submodule C:\Temp>ifort /c /standard-semantics /warn:all /stand sm.f90 Intel(R) Visual Fortran Intel(R) 64 Compiler for applications running on Intel(R ) 64, Version 18.0.2.185 Build 20180210 Copyright (C) 1985-2018 Intel Corporation. All rights reserved. sm.f90(5): error #6285: There is no matching specific subroutine for this generi c subroutine call. [GENFOO] call genfoo( k ) -----------^ compilation aborted for sm.f90 (code 1) C:\Temp>
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
jimdempseyatthecove wrote:
FF,
What happens if you separate the module and submodule into two files (and make the submodule dependent on the module).?
Jim Dempsey
Jim,
By the way, if no separate submodule implementation is chosen but rather it is just one program unit, then the compiler processes the code without errors:
C:\Temp>type m.f90 module m interface module subroutine sub() end subroutine sub end interface interface genfoo module subroutine foo( k ) integer, intent(in) :: k(:) end subroutine end interface contains module subroutine sub() integer :: k(1) call genfoo( k ) end subroutine sub module subroutine foo( k ) integer, intent(in) :: k(:) print *, k end subroutine foo end module C:\Temp>ifort /c /standard-semantics /warn:all /stand m.f90 Intel(R) Visual Fortran Intel(R) 64 Compiler for applications running on Intel(R ) 64, Version 18.0.2.185 Build 20180210 Copyright (C) 1985-2018 Intel Corporation. All rights reserved. C:\Temp>
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Readers may note the compiler error in the original post appears to be with dummy arguments of rank greater than zero. Shown below is a code variant with a dummy argument of rank zero which compiles without errors:
C:\Temp>type m.f90 module m interface module subroutine sub() end subroutine sub end interface interface genfoo module subroutine foo( k ) integer, intent(in) :: k end subroutine end interface end module submodule(m) sm contains module subroutine sub() integer :: k call genfoo( k ) end subroutine sub module subroutine foo( k ) integer, intent(in) :: k print *, k end subroutine foo end submodule C:\Temp>ifort /c /standard-semantics /warn:all /stand m.f90 Intel(R) Visual Fortran Intel(R) 64 Compiler for applications running on Intel(R ) 64, Version 18.0.2.185 Build 20180210 Copyright (C) 1985-2018 Intel Corporation. All rights reserved. C:\Temp>
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page