0
|
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
|