! { dg-do compile } ! ! PR 41556: [OOP] Errors in applying operator/assignment to an abstract type ! ! Contributed by Damian Rouson module abstract_algebra implicit none private public :: rescale public :: object type ,abstract :: object contains procedure(assign_interface) ,deferred :: assign procedure(product_interface) ,deferred :: product generic :: assignment(=) => assign generic :: operator(*) => product end type abstract interface function product_interface(lhs,rhs) result(product) import :: object class(object) ,intent(in) :: lhs class(object) ,allocatable :: product real ,intent(in) :: rhs end function subroutine assign_interface(lhs,rhs) import :: object class(object) ,intent(inout) :: lhs class(object) ,intent(in) :: rhs end subroutine end interface contains subroutine rescale(operand,scale) class(object) :: operand real ,intent(in) :: scale operand = operand*scale operand = operand%product(scale) end subroutine end module