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