| ! RUN: %python %S/test_errors.py %s %flang_fc1 |
| ! Structural equivalence of derived type definitions |
| module m |
| interface |
| module subroutine s1(x) |
| type :: nonseq |
| integer :: n |
| end type |
| type(nonseq), intent(in) :: x |
| end subroutine |
| module subroutine s2(x) |
| type :: seq |
| sequence |
| integer :: n |
| end type |
| type(seq), intent(in) :: x |
| end subroutine |
| module subroutine s3(x) |
| type :: chlen |
| sequence |
| character(2) :: s |
| end type |
| type(chlen), intent(in) :: x |
| end subroutine |
| module subroutine s4(x) |
| !ERROR: A sequence type may not have type parameters |
| type :: pdt(k) |
| integer, kind :: k |
| sequence |
| real(k) :: a |
| end type |
| type(pdt(4)), intent(in) :: x |
| end subroutine |
| end interface |
| end module |
| |
| submodule(m) sm |
| contains |
| module subroutine s1(x) |
| type :: nonseq |
| integer :: n |
| end type |
| !ERROR: Dummy argument 'x' has type nonseq; the corresponding argument in the interface body has distinct type nonseq |
| type(nonseq), intent(in) :: x |
| end subroutine |
| module subroutine s2(x) ! ok |
| type :: seq |
| sequence |
| integer :: n |
| end type |
| type(seq), intent(in) :: x |
| end subroutine |
| module subroutine s3(x) |
| type :: chlen |
| sequence |
| character(3) :: s ! note: length is 3, not 2 |
| end type |
| !ERROR: Dummy argument 'x' has type chlen; the corresponding argument in the interface body has distinct type chlen |
| type(chlen), intent(in) :: x |
| end subroutine |
| module subroutine s4(x) |
| !ERROR: A sequence type may not have type parameters |
| type :: pdt(k) |
| integer, kind :: k |
| sequence |
| real(k) :: a |
| end type |
| !ERROR: Dummy argument 'x' has type pdt(k=4_4); the corresponding argument in the interface body has distinct type pdt(k=4_4) |
| type(pdt(4)), intent(in) :: x |
| end subroutine |
| end submodule |
| |
| program main |
| use m |
| type :: nonseq |
| integer :: n |
| end type |
| type :: seq |
| sequence |
| integer :: n |
| end type |
| type :: chlen |
| sequence |
| character(2) :: s |
| end type |
| !ERROR: A sequence type may not have type parameters |
| type :: pdt(k) |
| integer, kind :: k |
| sequence |
| real(k) :: a |
| end type |
| !ERROR: Actual argument type 'nonseq' is not compatible with dummy argument type 'nonseq' |
| call s1(nonseq(1)) |
| call s2(seq(1)) ! ok |
| call s3(chlen('ab')) ! ok, matches interface |
| !ERROR: Actual argument type 'pdt(k=4_4)' is not compatible with dummy argument type 'pdt(k=4_4)' |
| call s4(pdt(4)(3.14159)) |
| end program |