2014-09-21 17:33:12 +00:00
|
|
|
! { dg-do run }
|
|
|
|
|
|
|
|
module udr10m
|
|
|
|
type dt
|
|
|
|
integer :: x = 0
|
|
|
|
end type
|
|
|
|
!$omp declare reduction(.add.:dt:omp_out=omp_out.add.omp_in)
|
|
|
|
!$omp declare reduction(+:dt:omp_out=omp_out+omp_in)
|
|
|
|
interface operator(+)
|
|
|
|
module procedure addme
|
|
|
|
end interface
|
|
|
|
interface operator(.add.)
|
|
|
|
module procedure addme
|
|
|
|
end interface
|
|
|
|
contains
|
|
|
|
type(dt) function addme (x, y)
|
|
|
|
type (dt), intent (in) :: x, y
|
|
|
|
addme%x = x%x + y%x
|
|
|
|
end function addme
|
|
|
|
end module udr10m
|
|
|
|
program udr10
|
|
|
|
use udr10m, only : operator(.localadd.) => operator(.add.), &
|
|
|
|
& operator(+), dl => dt
|
|
|
|
type(dl) :: j, k
|
|
|
|
integer :: i
|
|
|
|
!$omp parallel do reduction(+:j) reduction(.localadd.:k)
|
|
|
|
do i = 1, 100
|
|
|
|
j = j .localadd. dl(i)
|
|
|
|
k = k + dl(i * 2)
|
|
|
|
end do
|
2018-12-28 15:30:48 +00:00
|
|
|
if (j%x /= 5050 .or. k%x /= 10100) STOP 1
|
2014-09-21 17:33:12 +00:00
|
|
|
end
|