[Bug fortran/92913] New: Add argument-mismatch check for INTERFACE for non-module procedures in the same file
burnus at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Dec 11 12:44:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92913
Bug ID: 92913
Summary: Add argument-mismatch check for INTERFACE for
non-module procedures in the same file
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Keywords: diagnostic
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: burnus at gcc dot gnu.org
CC: tkoenig at gcc dot gnu.org
Target Milestone: ---
In the code below, there is an argument or function vs. subroutine mismatch
between stand-alone procedures and their interface blocks.
It would be very helpful to diagnose such mismatches. I have seen such code
before in some numeric programs, but it also exists as:
* libgomp/openacc.f90 – the 'module openacc_internal' has the interfaces and
the implementation is done by the stand-alone procedures at the bottom.
(libgomp/omp_lib.{h,f90}.in is different; they both only provide an interface,
except that the .h files only has 'external' and the function-result type.)
! Non-module subroutine to be compatible with Fortran 77 code
subroutine foo(x)
integer :: x
x = 5
end subroutine foo
! Make those procedures accessible as module
module m
interface
subroutine foo() ! Not diagnosed: missing argument
end subroutine foo
subroutine bar() ! Not diagnosed: subroutine vs. function
end subroutine bar
end interface
end module m
! Non-module function to be compatible with Fortran 77 code
integer function bar()
bar = 42
end function bar
Another case would be:
subroutine sub_1()
interface
subroutine bar(x)
integer :: x
end subroutine bar
interface
end subroutine sub_1
subroutine sub_2()
interface
subroutine bar() ! arg mismatch
end subroutine bar
interface
end subroutine sub_2
subroutine sub_3
external bar
integer bar ! function vs. subroutine mismatch
end subroutine sub_3
Such use also exists in real-world code – but it could also be used as cross
check for omp_lib.{h,f90} by temporarily adding
subroutine sub1()
#include <omp_lib.h>
end
to omp_lib.f90 + compiling it.
More information about the Gcc-bugs
mailing list