xref: /llvm-project/offload/test/offloading/fortran/target-with-threadprivate.f90 (revision fa56e8bb6451bdf24be6c2a8737dab5fe6a2039c)
1*fa56e8bbSagozillon! Basic offloading test that makes sure we can use the predominantly host
2*fa56e8bbSagozillon! pragma threadprivate in the same program as target code
3*fa56e8bbSagozillon! REQUIRES: flang, amdgpu
4*fa56e8bbSagozillon
5*fa56e8bbSagozillon! RUN: %libomptarget-compile-fortran-run-and-check-generic
6*fa56e8bbSagozillonprogram main
7*fa56e8bbSagozillon    implicit none
8*fa56e8bbSagozillon
9*fa56e8bbSagozillon    type dtype
10*fa56e8bbSagozillon       integer :: val(10)
11*fa56e8bbSagozillon    end type dtype
12*fa56e8bbSagozillon
13*fa56e8bbSagozillon    integer :: i
14*fa56e8bbSagozillon    type(dtype), pointer :: pointer1
15*fa56e8bbSagozillon    type(dtype), pointer :: pointer2=>null()
16*fa56e8bbSagozillon    integer, dimension(:), pointer :: data_pointer
17*fa56e8bbSagozillon
18*fa56e8bbSagozillon!$omp threadprivate(pointer2)
19*fa56e8bbSagozillon
20*fa56e8bbSagozillonnullify(pointer1)
21*fa56e8bbSagozillonallocate(pointer1)
22*fa56e8bbSagozillon
23*fa56e8bbSagozillonpointer2=>pointer1
24*fa56e8bbSagozillonpointer2%val(:)=1
25*fa56e8bbSagozillondata_pointer=>pointer2%val
26*fa56e8bbSagozillon
27*fa56e8bbSagozillon!$omp target
28*fa56e8bbSagozillon   do i = 1, 10
29*fa56e8bbSagozillon     data_pointer(i) = i
30*fa56e8bbSagozillon   end do
31*fa56e8bbSagozillon!$omp end target
32*fa56e8bbSagozillon
33*fa56e8bbSagozillonprint *, data_pointer
34*fa56e8bbSagozillon
35*fa56e8bbSagozillonend program main
36*fa56e8bbSagozillon
37*fa56e8bbSagozillon! CHECK: 1 2 3 4 5 6 7 8 9 10
38