! { 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