mirror of
https://github.com/autc04/Retro68.git
synced 2024-09-28 18:56:06 +00:00
68 lines
1.1 KiB
Fortran
68 lines
1.1 KiB
Fortran
! { dg-do run }
|
|
! Test the fix for PR41706, in which arguments of class methods that
|
|
! were themselves class methods did not work.
|
|
!
|
|
! Contributed by Janus Weil <janus@gcc.gnu.org>
|
|
!
|
|
module m
|
|
type :: t
|
|
real :: v = 1.5
|
|
contains
|
|
procedure, nopass :: a
|
|
procedure, nopass :: b
|
|
procedure, pass :: c
|
|
procedure, nopass :: d
|
|
end type
|
|
|
|
contains
|
|
|
|
real function a (x)
|
|
real :: x
|
|
a = 2.*x
|
|
end function
|
|
|
|
real function b (x)
|
|
real :: x
|
|
b = 3.*x
|
|
end function
|
|
|
|
real function c (x)
|
|
class (t) :: x
|
|
c = 4.*x%v
|
|
end function
|
|
|
|
subroutine d (x)
|
|
real :: x
|
|
if (abs(x-3.0)>1E-3) STOP 1
|
|
end subroutine
|
|
|
|
subroutine s (x)
|
|
class(t) :: x
|
|
real :: r
|
|
r = x%a (1.1) ! worked
|
|
if (r .ne. a (1.1)) STOP 1
|
|
|
|
r = x%a (b (1.2)) ! worked
|
|
if (r .ne. a(b (1.2))) STOP 2
|
|
|
|
r = b ( x%a (1.3)) ! worked
|
|
if (r .ne. b(a (1.3))) STOP 3
|
|
|
|
r = x%a(x%b (1.4)) ! failed
|
|
if (r .ne. a(b (1.4))) STOP 4
|
|
|
|
r = x%a(x%c ()) ! failed
|
|
if (r .ne. a(c (x))) STOP 5
|
|
|
|
call x%d (x%a(1.5)) ! failed
|
|
|
|
end subroutine
|
|
|
|
end
|
|
|
|
use m
|
|
class(t),allocatable :: x
|
|
allocate(x)
|
|
call s (x)
|
|
end
|