40 lines
661 B
Fortran
40 lines
661 B
Fortran
! { dg-do run }
|
|
!
|
|
! PR 39630: [F03] Procedure Pointer Components with PASS
|
|
!
|
|
! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
|
|
|
|
module m
|
|
type :: t
|
|
sequence
|
|
integer :: i
|
|
procedure(foo), pointer,pass(y) :: foo
|
|
end type t
|
|
contains
|
|
subroutine foo(x,y)
|
|
type(t),optional :: x
|
|
type(t) :: y
|
|
if(present(x)) then
|
|
print *, 'foo', x%i, y%i
|
|
if (mod(x%i+y%i,3)/=2) call abort()
|
|
else
|
|
print *, 'foo', y%i
|
|
if (mod(y%i,3)/=1) call abort()
|
|
end if
|
|
end subroutine foo
|
|
end module m
|
|
|
|
use m
|
|
type(t) :: t1, t2
|
|
t1%i = 4
|
|
t2%i = 7
|
|
t1%foo => foo
|
|
t2%foo => t1%foo
|
|
call t1%foo()
|
|
call t2%foo()
|
|
call t2%foo(t1)
|
|
end
|
|
|
|
! { dg-final { cleanup-modules "m" } }
|
|
|