Merge from mainline
[official-gcc.git] / libgomp / testsuite / libgomp.fortran / appendix-a / a.22.7.f90
blobfff4e6d499751adbec92b62fb6fe8cb1f355983c
1 ! { dg-do run }
2 ! { dg-require-effective-target tls_runtime }
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