1! { dg-do run } 2! { dg-require-effective-target tls_runtime } 3!$ use omp_lib 4 5 integer, save, allocatable :: a(:, :) 6 integer, allocatable :: b(:, :) 7 integer :: n 8 logical :: l 9!$omp threadprivate (a) 10 if (allocated (a)) STOP 1 11 call omp_set_dynamic (.false.) 12 l = .false. 13!$omp parallel num_threads (4) reduction(.or.:l) 14 allocate (a(-1:1, 7:10)) 15 a(:, :) = omp_get_thread_num () + 6 16 l = l.or..not.allocated (a) 17 l = l.or.size(a).ne.12.or.size(a,1).ne.3.or.size(a,2).ne.4 18!$omp end parallel 19 if (l.or.any(a.ne.6)) STOP 1 20!$omp parallel num_threads (4) copyin (a) reduction(.or.:l) private (b) 21 l = l.or.allocated (b) 22 l = l.or..not.allocated (a) 23 l = l.or.size(a).ne.12.or.size(a,1).ne.3.or.size(a,2).ne.4 24 l = l.or.any(a.ne.6) 25 allocate (b(1, 3)) 26 a(:, :) = omp_get_thread_num () + 36 27 b(:, :) = omp_get_thread_num () + 66 28 !$omp single 29 n = omp_get_thread_num () 30 !$omp end single copyprivate (a, b) 31 l = l.or..not.allocated (a) 32 l = l.or.size(a).ne.12.or.size(a,1).ne.3.or.size(a,2).ne.4 33 l = l.or.any(a.ne.(n + 36)) 34 l = l.or..not.allocated (b) 35 l = l.or.size(b).ne.3.or.size(b,1).ne.1.or.size(b,2).ne.3 36 l = l.or.any(b.ne.(n + 66)) 37 deallocate (b) 38 l = l.or.allocated (b) 39!$omp end parallel 40 if (n.lt.0 .or. n.ge.4) STOP 2 41 if (l.or.any(a.ne.(n + 36))) STOP 3 42!$omp parallel num_threads (4) reduction(.or.:l) 43 deallocate (a) 44 l = l.or.allocated (a) 45!$omp end parallel 46 if (l.or.allocated (a)) STOP 4 47end 48