forked from OSchip/llvm-project
186 lines
3.8 KiB
Fortran
186 lines
3.8 KiB
Fortran
! Tests based on examples in C.10.6
|
|
|
|
! C.10.6(10)
|
|
module m1
|
|
interface GOOD1
|
|
function F1A(X)
|
|
real :: F1A, X
|
|
end function
|
|
function F1B(X)
|
|
integer :: F1B, X
|
|
end function
|
|
end interface
|
|
end
|
|
|
|
! C.10.6(13)
|
|
module m2
|
|
interface GOOD2
|
|
function F2A(X)
|
|
real :: F2A, X
|
|
end function
|
|
function F2B(X, Y)
|
|
complex :: F2B
|
|
real :: X, Y
|
|
end function
|
|
end interface
|
|
end
|
|
|
|
! C.10.6(15)
|
|
module m3
|
|
interface GOOD3
|
|
subroutine S3A(W, X, Y, Z)
|
|
real :: W, Y
|
|
integer :: X, Z
|
|
end subroutine
|
|
subroutine S3B(X, W, Z, Y)
|
|
real :: W, Z
|
|
integer :: X, Y
|
|
end subroutine
|
|
end interface
|
|
end
|
|
module m3b
|
|
interface GOOD3
|
|
subroutine S3B(X, W, Z, Y)
|
|
real :: W, Z
|
|
integer :: X, Y
|
|
end subroutine
|
|
subroutine S3A(W, X, Y, Z)
|
|
real :: W, Y
|
|
integer :: X, Z
|
|
end subroutine
|
|
end interface
|
|
end
|
|
|
|
! C.10.6(17)
|
|
! BAD4(1.0,2,Y=3.0,Z=4) could apply to either procedure
|
|
module m4
|
|
!ERROR: Generic 'bad4' may not have specific procedures 's4a' and 's4b' as their interfaces are not distinguishable
|
|
interface BAD4
|
|
subroutine S4A(W, X, Y, Z)
|
|
real :: W, Y
|
|
integer :: X, Z
|
|
end subroutine
|
|
subroutine S4B(X, W, Z, Y)
|
|
real :: X, Y
|
|
integer :: W, Z
|
|
end subroutine
|
|
end interface
|
|
end
|
|
module m4b
|
|
!ERROR: Generic 'bad4' may not have specific procedures 's4b' and 's4a' as their interfaces are not distinguishable
|
|
interface BAD4
|
|
subroutine S4B(X, W, Z, Y)
|
|
real :: X, Y
|
|
integer :: W, Z
|
|
end subroutine
|
|
subroutine S4A(W, X, Y, Z)
|
|
real :: W, Y
|
|
integer :: X, Z
|
|
end subroutine
|
|
end interface
|
|
end
|
|
|
|
! C.10.6(19)
|
|
module m5
|
|
interface GOOD5
|
|
subroutine S5A(X)
|
|
real :: X
|
|
end subroutine
|
|
subroutine S5B(Y, X)
|
|
real :: Y, X
|
|
end subroutine
|
|
end interface
|
|
end
|
|
|
|
module FRUITS
|
|
type :: FRUIT
|
|
end type
|
|
type, extends(FRUIT) :: APPLE
|
|
end type
|
|
type, extends(FRUIT) :: PEAR
|
|
end type
|
|
type, extends(PEAR) :: BOSC
|
|
end type
|
|
end
|
|
|
|
! C.10.6(21)
|
|
! type(PEAR) :: A_PEAR
|
|
! type(BOSC) :: A_BOSC
|
|
! BAD6(A_PEAR,A_BOSC) ! could be s6a or s6b
|
|
module m6
|
|
!ERROR: Generic 'bad6' may not have specific procedures 's6a' and 's6b' as their interfaces are not distinguishable
|
|
interface BAD6
|
|
subroutine S6A(X, Y)
|
|
use FRUITS
|
|
class(PEAR) :: X, Y
|
|
end subroutine
|
|
subroutine S6B(X, Y)
|
|
use FRUITS
|
|
class(FRUIT) :: X
|
|
class(BOSC) :: Y
|
|
end subroutine
|
|
end interface
|
|
end
|
|
module m6b
|
|
!ERROR: Generic 'bad6' may not have specific procedures 's6b' and 's6a' as their interfaces are not distinguishable
|
|
interface BAD6
|
|
subroutine S6B(X, Y)
|
|
use FRUITS
|
|
class(FRUIT) :: X
|
|
class(BOSC) :: Y
|
|
end subroutine
|
|
subroutine S6A(X, Y)
|
|
use FRUITS
|
|
class(PEAR) :: X, Y
|
|
end subroutine
|
|
end interface
|
|
end
|
|
|
|
! C.10.6(22)
|
|
module m7
|
|
interface GOOD7
|
|
subroutine S7A(X, Y, Z)
|
|
use FRUITS
|
|
class(PEAR) :: X, Y, Z
|
|
end subroutine
|
|
subroutine S7B(X, Z, W)
|
|
use FRUITS
|
|
class(FRUIT) :: X
|
|
class(BOSC) :: Z
|
|
class(APPLE), optional :: W
|
|
end subroutine
|
|
end interface
|
|
end
|
|
module m7b
|
|
interface GOOD7
|
|
subroutine S7B(X, Z, W)
|
|
use FRUITS
|
|
class(FRUIT) :: X
|
|
class(BOSC) :: Z
|
|
class(APPLE), optional :: W
|
|
end subroutine
|
|
subroutine S7A(X, Y, Z)
|
|
use FRUITS
|
|
class(PEAR) :: X, Y, Z
|
|
end subroutine
|
|
end interface
|
|
end
|
|
|
|
! C.10.6(25)
|
|
! Invalid generic (according to the rules), despite the fact that it is unambiguous
|
|
module m8
|
|
!ERROR: Generic 'bad8' may not have specific procedures 's8a' and 's8b' as their interfaces are not distinguishable
|
|
interface BAD8
|
|
subroutine S8A(X, Y, Z)
|
|
real, optional :: X
|
|
integer :: Y
|
|
real :: Z
|
|
end subroutine
|
|
subroutine S8B(X, Z, Y)
|
|
integer, optional :: X
|
|
integer :: Z
|
|
real :: Y
|
|
end subroutine
|
|
end interface
|
|
end
|