| ! { dg-do run } |
| ! { dg-options "-fcray-pointer" } |
| ! { dg-require-effective-target tls_runtime } |
| |
| use omp_lib |
| integer :: a, b, c, d, p |
| logical :: l |
| pointer (ip, p) |
| save ip |
| !$omp threadprivate (ip) |
| a = 1 |
| b = 2 |
| c = 3 |
| l = .false. |
| !$omp parallel num_threads (3) reduction (.or.:l) private (d) |
| if (omp_get_thread_num () .eq. 0) then |
| ip = loc (a) |
| elseif (omp_get_thread_num () .eq. 1) then |
| ip = loc (b) |
| else |
| ip = loc (c) |
| end if |
| l = p .ne. omp_get_thread_num () + 1 |
| !$omp single |
| d = omp_get_thread_num () |
| !$omp end single copyprivate (d, ip) |
| l = l .or. (p .ne. d + 1) |
| !$omp end parallel |
| |
| if (l) call abort |
| end |