1! { dg-do run } 2! { dg-options "-O0" } 3! 4! Test fix for PR18022. 5! 6! Contributed by Paul Thomas <pault@gcc.gnu.org> 7! 8program assign_func_dtcomp 9 implicit none 10 type :: mytype 11 real :: x 12 real :: y 13 end type mytype 14 type (mytype), dimension (4) :: z 15 16 type :: thytype 17 real :: x(4) 18 end type thytype 19 type (thytype) :: w 20 real, dimension (4) :: a = (/1.,2.,3.,4./) 21 real, dimension (4) :: b = (/5.,6.,7.,8./) 22 23 24! Test the original problem is fixed. 25 z(:)%x = foo (a) 26 z(:)%y = foo (b) 27 28 29 if (any(z%x.ne.a).or.any(z%y.ne.b)) STOP 1 30 31! Make sure we did not break anything on the way. 32 w%x(:) = foo (b) 33 a = foo (b) 34 35 if (any(w%x.ne.b).or.any(a.ne.b)) STOP 2 36 37contains 38 39 function foo (v) result (ans) 40 real, dimension (:), intent(in) :: v 41 real, dimension (size(v)) :: ans 42 ans = v 43 end function foo 44 45 46end program assign_func_dtcomp 47 48