peter klausler 4864d9f7e9 [flang] Fix some module file issues exposed by Whizard
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
2021-01-14 09:44:50 -08:00

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