Peter Klausler 811aafcbf5 [flang] Don't resolve names in derived type definitions to generics
There's code in name resolution that handles resolution of references
that appear in the definitions of derived types -- it checks for
existing components in the type being defined, as well as for
non-parent components in its ancestors.  Special case code prevents
resolution of a name to the symbol of a procedure binding.  This
code needs to be extended so that names of generic procedures
are similarly prevented from shadowing symbols in the scope around
the type.

Differential Revision: https://reviews.llvm.org/D134398
2022-09-23 10:56:24 -07:00

43 lines
1.0 KiB
Fortran

! RUN: %python %S/test_symbols.py %s %flang_fc1
! Regression test of name resolution bug
!DEF: /m Module
module m
!DEF: /m/base ABSTRACT, PUBLIC DerivedType
type, abstract :: base
contains
!DEF: /m/base/foo Generic
!DEF: /m/base/spec DEFERRED ProcBinding
generic :: foo => spec
!DEF: /m/iface ABSTRACT, PUBLIC (Subroutine) Subprogram
!REF: /m/base/spec
procedure(iface), deferred :: spec
end type
abstract interface
!REF: /m/iface
!DEF: /m/iface/this ObjectEntity CLASS(base)
subroutine iface (this)
!REF: /m/base
import :: base
!REF: /m/base
!REF: /m/iface/this
class(base) :: this
end subroutine
end interface
!REF: /m/base
!DEF: /m/ext PUBLIC DerivedType
type, extends(base) :: ext
contains
!DEF: /m/ext/spec ProcBinding
!DEF: /m/foo PUBLIC (Subroutine) Subprogram
procedure :: spec => foo
end type
contains
!REF: /m/foo
!DEF: /m/foo/this ObjectEntity CLASS(ext)
subroutine foo (this)
!REF: /m/ext
!REF: /m/foo/this
class(ext) :: this
end subroutine
end module