| ! RUN: %python %S/test_errors.py %s %flang_fc1 |
| module m1 |
| type :: t1 |
| sequence |
| real :: x |
| end type |
| type :: t2 |
| sequence |
| real :: x |
| end type |
| type :: t3 |
| real :: x |
| end type |
| type :: t4 |
| real, private :: x |
| end type |
| contains |
| subroutine s1a(x) |
| type(t1), intent(in) :: x |
| end |
| subroutine s2a(x) |
| type(t2), intent(in) :: x |
| end |
| subroutine s3a(x) |
| type(t3), intent(in) :: x |
| end |
| subroutine s4a(x) |
| type(t4), intent(in) :: x |
| end |
| end |
| |
| module m2 |
| type t10 |
| integer n |
| contains |
| procedure :: f |
| generic:: operator(+) => f |
| end type |
| contains |
| elemental type(t10) function f(x,y) |
| class(t10), intent(in) :: x, y |
| f%n = x%n + y%n |
| end |
| end |
| |
| module m3 |
| use m2, only: rt10 => t10 |
| end |
| |
| program test |
| use m1, only: s1a, s2a, s3a, s4a |
| use m2, only: t10 |
| use m3, only: rt10 ! alias for t10, ensure no distinguishability error |
| type :: t1 |
| sequence |
| integer :: x ! distinct type |
| end type |
| type :: t2 |
| sequence |
| real :: x |
| end type |
| type :: t3 ! no SEQUENCE |
| real :: x |
| end type |
| type :: t4 |
| real :: x ! not PRIVATE |
| end type |
| interface distinguishable1 |
| procedure :: s1a, s1b |
| end interface |
| interface distinguishable2 |
| procedure :: s1a, s1b |
| end interface |
| interface distinguishable3 |
| procedure :: s1a, s1b |
| end interface |
| !ERROR: Generic 'indistinguishable' may not have specific procedures 's2b' and 's2a' as their interfaces are not distinguishable |
| interface indistinguishable |
| procedure :: s2a, s2b |
| end interface |
| contains |
| subroutine s1b(x) |
| type(t1), intent(in) :: x |
| end |
| subroutine s2b(x) |
| type(t2), intent(in) :: x |
| end |
| subroutine s3b(x) |
| type(t3), intent(in) :: x |
| end |
| subroutine s4b(x) |
| type(t4), intent(in) :: x |
| end |
| end |