diff options
Diffstat (limited to 'libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-gang-6.f90')
-rw-r--r-- | libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-gang-6.f90 | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-gang-6.f90 b/libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-gang-6.f90 new file mode 100644 index 00000000000..1e41555aa1c --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-fortran/kernels-private-vars-loop-gang-6.f90 @@ -0,0 +1,36 @@ +! Test of gang-private addressable variable declared on loop directive, with +! broadcasting to partitioned workers. + +! { dg-do run } + +program main + type vec3 + integer x, y, z, attr(13) + end type vec3 + + integer x, i, j, arr(0:32*32) + type(vec3) pt + + do i = 0, 32*32-1 + arr(i) = i + end do + + !$acc kernels copy(arr) + !$acc loop gang(num:32) private(pt) + do i = 0, 31 + pt%x = i + pt%y = i * 2 + pt%z = i * 4 + pt%attr(5) = i * 6 + + !$acc loop vector(length:32) + do j = 0, 31 + arr(i * 32 + j) = arr(i * 32 + j) + pt%x + pt%y + pt%z + pt%attr(5); + end do + end do + !$acc end kernels + + do i = 0, 32 * 32 - 1 + if (arr(i) .ne. i + (i / 32) * 13) call abort + end do +end program main |