Generic type-bound interfaces for user-defined operators need to be formatted as "OPERATOR(.op.)", not just ".op." PRIVATE generics need to be marked as such. Declaration ordering: when a generic interface shadows a derived type of the same name, it needs to be emitted to the module file at the point of definition of the derived type; otherwise, the derived type's definition may appear after its first use. The module symbol for a module read from a module file needs to be marked as coming from a module file before semantic processing is performed on the contents of the module so that any special handling for declarations in module files can be properly activated. IMPORT statements were sometimes missing for use-associated symbols in surrounding scopes; fine-tune NeedImport(). Differential Revision: https://reviews.llvm.org/D94636
36 lines
543 B
Fortran
36 lines
543 B
Fortran
! RUN: %S/test_modfile.sh %s %t %f18
|
|
|
|
! Ensure that an interface with the same name as a derived type
|
|
! does not cause that shadowed name to be emitted later than its
|
|
! uses in the module file.
|
|
|
|
module m
|
|
type :: t
|
|
end type
|
|
type :: t2
|
|
type(t) :: c
|
|
end type
|
|
interface t
|
|
module procedure f
|
|
end interface
|
|
contains
|
|
type(t) function f
|
|
end function
|
|
end module
|
|
|
|
!Expect: m.mod
|
|
!module m
|
|
!interface t
|
|
!procedure::f
|
|
!end interface
|
|
!type::t
|
|
!end type
|
|
!type::t2
|
|
!type(t)::c
|
|
!end type
|
|
!contains
|
|
!function f()
|
|
!type(t)::f
|
|
!end
|
|
!end
|