144 lines
3.9 KiB
Fortran
144 lines
3.9 KiB
Fortran
|
! { dg-do run }
|
||
|
! { dg-options "-w" }
|
||
|
|
||
|
character (6) :: c, f2
|
||
|
character (6) :: d(2)
|
||
|
c = f1 (6)
|
||
|
if (c .ne. 'opqrst') call abort
|
||
|
c = f2 (6)
|
||
|
if (c .ne. '_/!!/_') call abort
|
||
|
d = f3 (6)
|
||
|
if (d(1) .ne. 'opqrst' .or. d(2) .ne. 'a') call abort
|
||
|
d = f4 (6)
|
||
|
if (d(1) .ne. 'Opqrst' .or. d(2) .ne. 'A') call abort
|
||
|
contains
|
||
|
function f1 (n)
|
||
|
use omp_lib
|
||
|
character (n) :: f1
|
||
|
logical :: l
|
||
|
f1 = 'abcdef'
|
||
|
l = .false.
|
||
|
!$omp parallel firstprivate (f1) reduction (.or.:l) num_threads (2)
|
||
|
l = f1 .ne. 'abcdef'
|
||
|
if (omp_get_thread_num () .eq. 0) f1 = 'ijklmn'
|
||
|
if (omp_get_thread_num () .eq. 1) f1 = 'IJKLMN'
|
||
|
!$omp barrier
|
||
|
l = l .or. (omp_get_thread_num () .eq. 0 .and. f1 .ne. 'ijklmn')
|
||
|
l = l .or. (omp_get_thread_num () .eq. 1 .and. f1 .ne. 'IJKLMN')
|
||
|
!$omp end parallel
|
||
|
f1 = 'zZzz_z'
|
||
|
!$omp parallel shared (f1) reduction (.or.:l) num_threads (2)
|
||
|
l = l .or. f1 .ne. 'zZzz_z'
|
||
|
!$omp barrier
|
||
|
!$omp master
|
||
|
f1 = 'abc'
|
||
|
!$omp end master
|
||
|
!$omp barrier
|
||
|
l = l .or. f1 .ne. 'abc'
|
||
|
!$omp barrier
|
||
|
if (omp_get_thread_num () .eq. 1) f1 = 'def'
|
||
|
!$omp barrier
|
||
|
l = l .or. f1 .ne. 'def'
|
||
|
!$omp end parallel
|
||
|
if (l) call abort
|
||
|
f1 = 'opqrst'
|
||
|
end function f1
|
||
|
function f3 (n)
|
||
|
use omp_lib
|
||
|
character (n), dimension (2) :: f3
|
||
|
logical :: l
|
||
|
f3 = 'abcdef'
|
||
|
l = .false.
|
||
|
!$omp parallel firstprivate (f3) reduction (.or.:l) num_threads (2)
|
||
|
l = any (f3 .ne. 'abcdef')
|
||
|
if (omp_get_thread_num () .eq. 0) f3 = 'ijklmn'
|
||
|
if (omp_get_thread_num () .eq. 1) f3 = 'IJKLMN'
|
||
|
!$omp barrier
|
||
|
l = l .or. (omp_get_thread_num () .eq. 0 .and. any (f3 .ne. 'ijklmn'))
|
||
|
l = l .or. (omp_get_thread_num () .eq. 1 .and. any (f3 .ne. 'IJKLMN'))
|
||
|
!$omp end parallel
|
||
|
f3 = 'zZzz_z'
|
||
|
!$omp parallel shared (f3) reduction (.or.:l) num_threads (2)
|
||
|
l = l .or. any (f3 .ne. 'zZzz_z')
|
||
|
!$omp barrier
|
||
|
!$omp master
|
||
|
f3 = 'abc'
|
||
|
!$omp end master
|
||
|
!$omp barrier
|
||
|
l = l .or. any (f3 .ne. 'abc')
|
||
|
!$omp barrier
|
||
|
if (omp_get_thread_num () .eq. 1) f3 = 'def'
|
||
|
!$omp barrier
|
||
|
l = l .or. any (f3 .ne. 'def')
|
||
|
!$omp end parallel
|
||
|
if (l) call abort
|
||
|
f3(1) = 'opqrst'
|
||
|
f3(2) = 'a'
|
||
|
end function f3
|
||
|
function f4 (n)
|
||
|
use omp_lib
|
||
|
character (n), dimension (n - 4) :: f4
|
||
|
logical :: l
|
||
|
f4 = 'abcdef'
|
||
|
l = .false.
|
||
|
!$omp parallel firstprivate (f4) reduction (.or.:l) num_threads (2)
|
||
|
l = any (f4 .ne. 'abcdef')
|
||
|
if (omp_get_thread_num () .eq. 0) f4 = 'ijklmn'
|
||
|
if (omp_get_thread_num () .eq. 1) f4 = 'IJKLMN'
|
||
|
!$omp barrier
|
||
|
l = l .or. (omp_get_thread_num () .eq. 0 .and. any (f4 .ne. 'ijklmn'))
|
||
|
l = l .or. (omp_get_thread_num () .eq. 1 .and. any (f4 .ne. 'IJKLMN'))
|
||
|
l = l .or. size (f4) .ne. 2
|
||
|
!$omp end parallel
|
||
|
f4 = 'zZzz_z'
|
||
|
!$omp parallel shared (f4) reduction (.or.:l) num_threads (2)
|
||
|
l = l .or. any (f4 .ne. 'zZzz_z')
|
||
|
!$omp barrier
|
||
|
!$omp master
|
||
|
f4 = 'abc'
|
||
|
!$omp end master
|
||
|
!$omp barrier
|
||
|
l = l .or. any (f4 .ne. 'abc')
|
||
|
!$omp barrier
|
||
|
if (omp_get_thread_num () .eq. 1) f4 = 'def'
|
||
|
!$omp barrier
|
||
|
l = l .or. any (f4 .ne. 'def')
|
||
|
l = l .or. size (f4) .ne. 2
|
||
|
!$omp end parallel
|
||
|
if (l) call abort
|
||
|
f4(1) = 'Opqrst'
|
||
|
f4(2) = 'A'
|
||
|
end function f4
|
||
|
end
|
||
|
function f2 (n)
|
||
|
use omp_lib
|
||
|
character (*) :: f2
|
||
|
logical :: l
|
||
|
f2 = 'abcdef'
|
||
|
l = .false.
|
||
|
!$omp parallel firstprivate (f2) reduction (.or.:l) num_threads (2)
|
||
|
l = f2 .ne. 'abcdef'
|
||
|
if (omp_get_thread_num () .eq. 0) f2 = 'ijklmn'
|
||
|
if (omp_get_thread_num () .eq. 1) f2 = 'IJKLMN'
|
||
|
!$omp barrier
|
||
|
l = l .or. (omp_get_thread_num () .eq. 0 .and. f2 .ne. 'ijklmn')
|
||
|
l = l .or. (omp_get_thread_num () .eq. 1 .and. f2 .ne. 'IJKLMN')
|
||
|
!$omp end parallel
|
||
|
f2 = 'zZzz_z'
|
||
|
!$omp parallel shared (f2) reduction (.or.:l) num_threads (2)
|
||
|
l = l .or. f2 .ne. 'zZzz_z'
|
||
|
!$omp barrier
|
||
|
!$omp master
|
||
|
f2 = 'abc'
|
||
|
!$omp end master
|
||
|
!$omp barrier
|
||
|
l = l .or. f2 .ne. 'abc'
|
||
|
!$omp barrier
|
||
|
if (omp_get_thread_num () .eq. 1) f2 = 'def'
|
||
|
!$omp barrier
|
||
|
l = l .or. f2 .ne. 'def'
|
||
|
!$omp end parallel
|
||
|
if (l) call abort
|
||
|
f2 = '_/!!/_'
|
||
|
end function f2
|