| ! { dg-do run } |
| ! { dg-require-effective-target tls_runtime } |
| |
| PROGRAM A22_7_GOOD |
| INTEGER, ALLOCATABLE, SAVE :: A(:) |
| INTEGER, POINTER, SAVE :: PTR |
| INTEGER, SAVE :: I |
| INTEGER, TARGET :: TARG |
| LOGICAL :: FIRSTIN = .TRUE. |
| !$OMP THREADPRIVATE(A, I, PTR) |
| ALLOCATE (A(3)) |
| A = (/1,2,3/) |
| PTR => TARG |
| I=5 |
| !$OMP PARALLEL COPYIN(I, PTR) |
| !$OMP CRITICAL |
| IF (FIRSTIN) THEN |
| TARG = 4 ! Update target of ptr |
| I = I + 10 |
| IF (ALLOCATED(A)) A = A + 10 |
| FIRSTIN = .FALSE. |
| END IF |
| IF (ALLOCATED(A)) THEN |
| PRINT *, "a = ", A |
| ELSE |
| PRINT *, "A is not allocated" |
| END IF |
| PRINT *, "ptr = ", PTR |
| PRINT *, "i = ", I |
| PRINT * |
| !$OMP END CRITICAL |
| !$OMP END PARALLEL |
| END PROGRAM A22_7_GOOD |