mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-16 21:56:34 +00:00

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
43 lines
1.0 KiB
Fortran
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
|