blob: ddc5d9b41547ca450a0242987932465454eca07b [file] [log] [blame]
! { dg-do run }
! PR51634 - Handle allocatable components correctly in expressions
! involving typebound operators. See comment 2 of PR.
!
! Reported by Tobias Burnus <burnus@gcc.gnu.org>
!
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])) STOP 1
if (any (fireworks%velocity .ne. [24, 30, 36])) STOP 2
end program