! { dg-do run } ! PR51634 - Handle allocatable components correctly in expressions ! involving typebound operators. See comment 2 of PR. ! ! Reported by Tobias Burnus ! module soop_stars_class implicit none type soop_stars real, dimension(:), allocatable :: position,velocity contains procedure :: total procedure :: product generic :: operator(+) => total generic :: operator(*) => product end type contains type(soop_stars) function product(lhs,rhs) class(soop_stars) ,intent(in) :: lhs real ,intent(in) :: rhs product%position = lhs%position*rhs product%velocity = lhs%velocity*rhs end function type(soop_stars) function total(lhs,rhs) class(soop_stars) ,intent(in) :: lhs,rhs total%position = lhs%position + rhs%position total%velocity = lhs%velocity + rhs%velocity end function end module program main use soop_stars_class ,only : soop_stars implicit none type(soop_stars) :: fireworks real :: dt fireworks%position = [1,2,3] fireworks%velocity = [4,5,6] dt = 5 fireworks = fireworks + fireworks*dt if (any (fireworks%position .ne. [6, 12, 18])) call abort if (any (fireworks%velocity .ne. [24, 30, 36])) call abort end program