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