| ! RUN: %S/test_errors.sh %s %t %f18 |
| module m1 |
| implicit none |
| contains |
| subroutine foo(x) |
| real :: x |
| end subroutine |
| end module |
| |
| !Note: PGI, Intel, GNU, and NAG allow this; Sun does not |
| module m2 |
| use m1 |
| implicit none |
| !ERROR: 'foo' may not be the name of both a generic interface and a procedure unless it is a specific procedure of the generic |
| interface foo |
| module procedure s |
| end interface |
| contains |
| subroutine s(i) |
| integer :: i |
| end subroutine |
| end module |
| |
| subroutine foo |
| !ERROR: Cannot use-associate 'foo'; it is already declared in this scope |
| use m1 |
| end |
| |
| subroutine bar |
| !ERROR: Cannot use-associate 'bar'; it is already declared in this scope |
| use m1, bar => foo |
| end |
| |
| !OK to use-associate a type with the same name as a generic |
| module m3a |
| type :: foo |
| end type |
| end |
| module m3b |
| use m3a |
| interface foo |
| end interface |
| end |
| |
| ! Can't have derived type and function with same name |
| module m4a |
| type :: foo |
| end type |
| contains |
| !ERROR: 'foo' is already declared in this scoping unit |
| function foo(x) |
| end |
| end |
| ! Even if there is also a generic interface of that name |
| module m4b |
| type :: foo |
| end type |
| !ERROR: 'foo' is already declared in this scoping unit |
| interface foo |
| procedure :: foo |
| end interface foo |
| contains |
| function foo(x) |
| end |
| end |
| |
| ! Use associating a name that is a generic and a derived type |
| module m5a |
| interface g |
| end interface |
| type g |
| end type |
| end module |
| module m5b |
| use m5a |
| interface g |
| procedure f |
| end interface |
| type(g) :: x |
| contains |
| function f(i) |
| end function |
| end module |
| subroutine s5 |
| use m5b |
| type(g) :: y |
| end |