! { dg-do run } ! { dg-options "-O0" } ! ! Test fix for PR18022. ! ! Contributed by Paul Thomas ! program assign_func_dtcomp implicit none type :: mytype real :: x real :: y end type mytype type (mytype), dimension (4) :: z type :: thytype real :: x(4) end type thytype type (thytype) :: w real, dimension (4) :: a = (/1.,2.,3.,4./) real, dimension (4) :: b = (/5.,6.,7.,8./) ! Test the original problem is fixed. z(:)%x = foo (a) z(:)%y = foo (b) if (any(z%x.ne.a).or.any(z%y.ne.b)) call abort () ! Make sure we did not break anything on the way. w%x(:) = foo (b) a = foo (b) if (any(w%x.ne.b).or.any(a.ne.b)) call abort () contains function foo (v) result (ans) real, dimension (:), intent(in) :: v real, dimension (size(v)) :: ans ans = v end function foo end program assign_func_dtcomp