1! { dg-do compile }
2!
3! PR 54832: [4.8 Regression] [OOP] Type-bound operator not picked up with RESULT variable
4!
5! Contributed by Damian Rouson <rouson@sandia.gov>
6
7  type, abstract :: integrand
8  contains
9    procedure(t_interface), deferred :: t
10    procedure(assign_interface), deferred :: assign
11    procedure(times_interface), deferred :: times
12    generic :: operator(*) => times
13    generic :: assignment(=) => assign
14  end type
15
16  abstract interface
17    function t_interface(this) result(dState_dt)
18      import :: integrand
19      class(integrand) ,intent(in)  :: this
20      class(integrand) ,allocatable :: dState_dt
21    end function
22    function times_interface(lhs,rhs)
23      import :: integrand
24      class(integrand) ,intent(in)  :: lhs
25      class(integrand) ,allocatable :: times_interface
26      real, intent(in)  :: rhs
27    end function
28    subroutine assign_interface(lhs,rhs)
29      import :: integrand
30      class(integrand) ,intent(in)    :: rhs
31      class(integrand) ,intent(inout) :: lhs
32    end subroutine
33  end interface
34
35contains
36
37  subroutine integrate(model,dt)
38    class(integrand) :: model
39    real dt
40    model = model%t()*dt
41   end subroutine
42
43end
44