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