]> oss.titaniummirror.com Git - msp430-gcc.git/blobdiff - libgomp/testsuite/libgomp.fortran/allocatable2.f90
Imported gcc-4.4.3
[msp430-gcc.git] / libgomp / testsuite / libgomp.fortran / allocatable2.f90
diff --git a/libgomp/testsuite/libgomp.fortran/allocatable2.f90 b/libgomp/testsuite/libgomp.fortran/allocatable2.f90
new file mode 100644 (file)
index 0000000..a37616b
--- /dev/null
@@ -0,0 +1,47 @@
+! { dg-do run }
+! { dg-require-effective-target tls_runtime }
+!$ use omp_lib
+
+  integer, save, allocatable :: a(:, :)
+  integer, allocatable :: b(:, :)
+  integer :: n
+  logical :: l
+!$omp threadprivate (a)
+  if (allocated (a)) call abort
+  call omp_set_dynamic (.false.)
+  l = .false.
+!$omp parallel num_threads (4) reduction(.or.:l)
+  allocate (a(-1:1, 7:10))
+  a(:, :) = omp_get_thread_num () + 6
+  l = l.or..not.allocated (a)
+  l = l.or.size(a).ne.12.or.size(a,1).ne.3.or.size(a,2).ne.4
+!$omp end parallel
+  if (l.or.any(a.ne.6)) call abort ()
+!$omp parallel num_threads (4) copyin (a) reduction(.or.:l) private (b)
+  l = l.or.allocated (b)
+  l = l.or..not.allocated (a)
+  l = l.or.size(a).ne.12.or.size(a,1).ne.3.or.size(a,2).ne.4
+  l = l.or.any(a.ne.6)
+  allocate (b(1, 3))
+  a(:, :) = omp_get_thread_num () + 36
+  b(:, :) = omp_get_thread_num () + 66
+  !$omp single
+    n = omp_get_thread_num ()
+  !$omp end single copyprivate (a, b)
+  l = l.or..not.allocated (a)
+  l = l.or.size(a).ne.12.or.size(a,1).ne.3.or.size(a,2).ne.4
+  l = l.or.any(a.ne.(n + 36))
+  l = l.or..not.allocated (b)
+  l = l.or.size(b).ne.3.or.size(b,1).ne.1.or.size(b,2).ne.3
+  l = l.or.any(b.ne.(n + 66))
+  deallocate (b)
+  l = l.or.allocated (b)
+!$omp end parallel
+  if (n.lt.0 .or. n.ge.4) call abort
+  if (l.or.any(a.ne.(n + 36))) call abort
+!$omp parallel num_threads (4) reduction(.or.:l)
+  deallocate (a)
+  l = l.or.allocated (a)
+!$omp end parallel
+  if (l.or.allocated (a)) call abort
+end