mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-17 03:26:48 +00:00

As the new test here shows by failing with the current compiler with a bogus error message about indistinguishable specific procedures in a generic interface, name resolution needs to take care to not copy a USE-associated generic into the current scope for extension when the USE association is actually into an enclosing scope. Differential Revision: https://reviews.llvm.org/D145750
61 lines
1.4 KiB
Fortran
61 lines
1.4 KiB
Fortran
! RUN: %python %S/test_symbols.py %s %flang_fc1
|
|
! Exercise generic redefinitions in inner procedures with conflicting subprograms.
|
|
!DEF: /m Module
|
|
module m
|
|
!DEF: /m/generic PUBLIC (Subroutine) Generic
|
|
interface generic
|
|
!DEF: /m/specific1 PUBLIC (Subroutine) Subprogram
|
|
module procedure :: specific1
|
|
end interface
|
|
contains
|
|
!REF: /m/specific1
|
|
subroutine specific1
|
|
print *, 1
|
|
end subroutine
|
|
!DEF: /m/specific2 PUBLIC (Subroutine) Subprogram
|
|
subroutine specific2
|
|
print *, 2
|
|
end subroutine
|
|
!DEF: /m/test PUBLIC (Subroutine) Subprogram
|
|
subroutine test
|
|
!REF: /m/specific1
|
|
call generic
|
|
end subroutine
|
|
!DEF: /m/outer PUBLIC (Subroutine) Subprogram
|
|
subroutine outer
|
|
!DEF: /m/outer/inner1 (Subroutine) Subprogram
|
|
call inner1
|
|
contains
|
|
!REF: /m/outer/inner1
|
|
subroutine inner1
|
|
!DEF: /m/outer/inner1/generic (Subroutine) Generic
|
|
interface generic
|
|
!REF: /m/specific2
|
|
module procedure :: specific2
|
|
end interface
|
|
!REF: /m/specific2
|
|
call generic
|
|
end subroutine inner1
|
|
end subroutine outer
|
|
end module m
|
|
!DEF: /main MainProgram
|
|
program main
|
|
!REF: /m
|
|
use :: m
|
|
!REF: /m/specific1
|
|
call generic
|
|
!DEF: /main/inner2 (Subroutine) Subprogram
|
|
call inner2
|
|
contains
|
|
!REF: /main/inner2
|
|
subroutine inner2
|
|
!DEF: /main/inner2/generic (Subroutine) Generic
|
|
interface generic
|
|
!DEF: /main/specific2 (Subroutine) Use
|
|
module procedure :: specific2
|
|
end interface
|
|
!REF: /main/specific2
|
|
call generic
|
|
end subroutine inner2
|
|
end program
|