1! { dg-do run }
2! Test the fix for PR41706, in which arguments of class methods that
3! were themselves class methods did not work.
4!
5! Contributed by Janus Weil <janus@gcc.gnu.org>
6!
7module m
8type :: t
9  real :: v = 1.5
10contains
11  procedure, nopass :: a
12  procedure, nopass :: b
13  procedure, pass :: c
14  procedure, nopass :: d
15end type
16
17contains
18
19  real function a (x)
20    real :: x
21    a = 2.*x
22  end function
23
24  real function b (x)
25    real :: x
26    b = 3.*x
27  end function
28
29  real function c (x)
30    class (t) :: x
31    c = 4.*x%v
32  end function
33
34  subroutine d (x)
35    real :: x
36    if (abs(x-3.0)>1E-3) STOP 1
37  end subroutine
38
39  subroutine s (x)
40    class(t) :: x
41    real :: r
42    r = x%a (1.1)       ! worked
43    if (r .ne. a (1.1)) STOP 1
44
45    r = x%a (b (1.2))   ! worked
46    if (r .ne. a(b (1.2))) STOP 2
47
48    r = b ( x%a (1.3))  ! worked
49    if (r .ne. b(a (1.3))) STOP 3
50
51    r = x%a(x%b (1.4))   ! failed
52    if (r .ne. a(b (1.4))) STOP 4
53
54    r = x%a(x%c ())   ! failed
55    if (r .ne. a(c (x))) STOP 5
56
57    call x%d (x%a(1.5))  ! failed
58
59  end subroutine
60
61end
62
63  use m
64  class(t),allocatable :: x
65  allocate(x)
66  call s (x)
67end
68