| ! RUN: %python %S/test_errors.py %s %flang_fc1 |
| module m1 |
| type t1 |
| end type |
| type t3 |
| integer t3c |
| end type |
| interface |
| subroutine s1(x) |
| !ERROR: 't1' from host is not accessible |
| import :: t1 |
| type(t1) :: x |
| !BECAUSE: 't1' is hidden by this entity |
| 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 |
| !BECAUSE: 't3' is hidden by this entity |
| 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 |
| subroutine s8() |
| !This case is a dangerous ambiguity allowed by the standard. |
| !ERROR: 't1' from host is not accessible |
| type(t1), pointer :: p |
| !BECAUSE: 't1' is hidden by this entity |
| type t1 |
| integer n(2) |
| end type |
| end |
| subroutine s9() |
| !This case is a dangerous ambiguity allowed by the standard. |
| type t2 |
| !ERROR: 't1' from host is not accessible |
| type(t1), pointer :: p |
| end type |
| !BECAUSE: 't1' is hidden by this entity |
| type t1 |
| integer n(2) |
| end type |
| type(t2) x |
| end |
| subroutine s10() |
| !Forward shadowing derived type in IMPLICIT |
| !(supported by all other compilers) |
| implicit type(t1) (c) ! forward shadow |
| implicit type(t3) (d) ! host associated |
| type t1 |
| integer a |
| end type |
| c%a = 1 |
| d%t3c = 2 |
| 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 |