blob: 24bdf2bae0c328ee8f8df1cc51c00f5e0e53ad1b [file] [log] [blame]
! PR 101319
! { dg-do compile }
!
! TS 29113
! 6.3 Argument association
!
! An assumed-type dummy argument shall not correspond to an actual argument
! that is of a derived type that has type parameters, type-bound procedures,
! or final subroutines.
!
! In the 2018 Fortran standard, this requirement appears as:
!
! 15.5.2.4 Ordinary dummy variables
!
! If the actual argument is of a derived type that has type parameters,
! type-bound procedures, or final subroutines, the dummy argument shall
! not be assumed-type.
!
! This file contains code that is expected to produce errors.
module m
! basic derived type
type :: t1
real*8 :: xyz (3)
end type
! derived type with type parameters
type t2 (k, l)
integer, kind :: k
integer, len :: l
real(k) :: a(l)
end type
! derived type with a type-bound procedure
type :: t3
integer :: xyz(3)
contains
procedure, pass :: frob => frob_t3
end type
! derived type with a final subroutine
type :: t4
integer :: xyz(3)
contains
final :: final_t4
end type
contains
! implementation of the type-bound procedure for t3 above
subroutine frob_t3 (a)
class (t3) :: a
a%xyz = 0
end subroutine
! implementation of the final subroutine for t4 above
subroutine final_t4 (a)
type (t4) :: a
a%xyz = 0
end subroutine
! useless subroutine with an assumed-type dummy.
subroutine s1 (a)
type(*) :: a
end subroutine
! test procedure
subroutine testit
type(t1) :: a1
type(t2(8,20)) :: a2
type(t3) :: a3
type(t4) :: a4
call s1 (a1) ! OK
call s1 (a2) ! { dg-error "assumed-type dummy" }
call s1 (a3) ! { dg-error "assumed-type dummy" }
call s1 (a4) ! { dg-error "assumed-type dummy" }
end subroutine
end module