xref: /openbsd-src/gnu/gcc/libgomp/testsuite/libgomp.fortran/appendix-a/a.22.7.f90 (revision 404b540a9034ac75a6199ad1a32d1bbc7a0d4210)
1*404b540aSrobert! { dg-do run }
2*404b540aSrobert! { dg-require-effective-target tls_runtime }
3*404b540aSrobert
4*404b540aSrobert      PROGRAM A22_7_GOOD
5*404b540aSrobert        INTEGER, ALLOCATABLE, SAVE :: A(:)
6*404b540aSrobert        INTEGER, POINTER, SAVE :: PTR
7*404b540aSrobert        INTEGER, SAVE :: I
8*404b540aSrobert        INTEGER, TARGET :: TARG
9*404b540aSrobert        LOGICAL :: FIRSTIN = .TRUE.
10*404b540aSrobert!$OMP THREADPRIVATE(A, I, PTR)
11*404b540aSrobert        ALLOCATE (A(3))
12*404b540aSrobert        A = (/1,2,3/)
13*404b540aSrobert        PTR => TARG
14*404b540aSrobert        I=5
15*404b540aSrobert!$OMP PARALLEL COPYIN(I, PTR)
16*404b540aSrobert!$OMP CRITICAL
17*404b540aSrobert            IF (FIRSTIN) THEN
18*404b540aSrobert              TARG = 4           ! Update target of ptr
19*404b540aSrobert              I = I + 10
20*404b540aSrobert              IF (ALLOCATED(A)) A = A + 10
21*404b540aSrobert              FIRSTIN = .FALSE.
22*404b540aSrobert            END IF
23*404b540aSrobert            IF (ALLOCATED(A)) THEN
24*404b540aSrobert              PRINT *, "a = ", A
25*404b540aSrobert            ELSE
26*404b540aSrobert              PRINT *, "A is not allocated"
27*404b540aSrobert            END IF
28*404b540aSrobert            PRINT *, "ptr = ", PTR
29*404b540aSrobert            PRINT *, "i = ", I
30*404b540aSrobert            PRINT *
31*404b540aSrobert!$OMP END CRITICAL
32*404b540aSrobert!$OMP END PARALLEL
33*404b540aSrobert      END PROGRAM A22_7_GOOD
34