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