Peter Klausler aee705661f [flang] Silence bogus error on use after IMPORT
When a scope uses an explicit IMPORT statement to import a
symbol from the scope's host, it should not emit a bogus error
message later if that symbol is used in a specification construct.
The code that checks for imports being hidden by local declarations
was not allowing for the presence of host association (or USE)
indirection symbols in the local scope.  Fix by using GetUltimate()
before checking for the hidden symbol.

Differential Revision: https://reviews.llvm.org/D118747
2022-02-02 11:15:58 -08:00

57 lines
1.2 KiB
Fortran

! RUN: %python %S/test_errors.py %s %flang_fc1
module m1
type t1
end type
type t3
end type
interface
subroutine s1(x)
!ERROR: 't1' from host is not accessible
import :: t1
type(t1) :: x
integer :: t1
end subroutine
subroutine s2()
!ERROR: 't2' not found in host scope
import :: t2
end subroutine
subroutine s3(x, y)
!ERROR: Derived type 't1' not found
type(t1) :: x, y
end subroutine
subroutine s4(x, y)
!ERROR: 't3' from host is not accessible
import, all
type(t1) :: x
type(t3) :: y
integer :: t3
end subroutine
end interface
contains
subroutine s5()
end
subroutine s6()
import, only: s5
implicit none(external)
call s5()
end
subroutine s7()
import, only: t1
implicit none(external)
!ERROR: 's5' is an external procedure without the EXTERNAL attribute in a scope with IMPLICIT NONE(EXTERNAL)
call s5()
end
end module
module m2
integer, parameter :: ck = kind('a')
end module
program main
use m2
interface
subroutine s0(x)
import :: ck
character(kind=ck) :: x ! no error
end subroutine
end interface
end program