1*404b540aSrobert! { dg-do run } 2*404b540aSrobert! { dg-options "-w" } 3*404b540aSrobert 4*404b540aSrobert character (6) :: c, f2 5*404b540aSrobert character (6) :: d(2) 6*404b540aSrobert c = f1 (6) 7*404b540aSrobert if (c .ne. 'opqrst') call abort 8*404b540aSrobert c = f2 (6) 9*404b540aSrobert if (c .ne. '_/!!/_') call abort 10*404b540aSrobert d = f3 (6) 11*404b540aSrobert if (d(1) .ne. 'opqrst' .or. d(2) .ne. 'a') call abort 12*404b540aSrobert d = f4 (6) 13*404b540aSrobert if (d(1) .ne. 'Opqrst' .or. d(2) .ne. 'A') call abort 14*404b540aSrobertcontains 15*404b540aSrobert function f1 (n) 16*404b540aSrobert use omp_lib 17*404b540aSrobert character (n) :: f1 18*404b540aSrobert logical :: l 19*404b540aSrobert f1 = 'abcdef' 20*404b540aSrobert l = .false. 21*404b540aSrobert!$omp parallel firstprivate (f1) reduction (.or.:l) num_threads (2) 22*404b540aSrobert l = f1 .ne. 'abcdef' 23*404b540aSrobert if (omp_get_thread_num () .eq. 0) f1 = 'ijklmn' 24*404b540aSrobert if (omp_get_thread_num () .eq. 1) f1 = 'IJKLMN' 25*404b540aSrobert!$omp barrier 26*404b540aSrobert l = l .or. (omp_get_thread_num () .eq. 0 .and. f1 .ne. 'ijklmn') 27*404b540aSrobert l = l .or. (omp_get_thread_num () .eq. 1 .and. f1 .ne. 'IJKLMN') 28*404b540aSrobert!$omp end parallel 29*404b540aSrobert f1 = 'zZzz_z' 30*404b540aSrobert!$omp parallel shared (f1) reduction (.or.:l) num_threads (2) 31*404b540aSrobert l = l .or. f1 .ne. 'zZzz_z' 32*404b540aSrobert!$omp barrier 33*404b540aSrobert!$omp master 34*404b540aSrobert f1 = 'abc' 35*404b540aSrobert!$omp end master 36*404b540aSrobert!$omp barrier 37*404b540aSrobert l = l .or. f1 .ne. 'abc' 38*404b540aSrobert!$omp barrier 39*404b540aSrobert if (omp_get_thread_num () .eq. 1) f1 = 'def' 40*404b540aSrobert!$omp barrier 41*404b540aSrobert l = l .or. f1 .ne. 'def' 42*404b540aSrobert!$omp end parallel 43*404b540aSrobert if (l) call abort 44*404b540aSrobert f1 = 'opqrst' 45*404b540aSrobert end function f1 46*404b540aSrobert function f3 (n) 47*404b540aSrobert use omp_lib 48*404b540aSrobert character (n), dimension (2) :: f3 49*404b540aSrobert logical :: l 50*404b540aSrobert f3 = 'abcdef' 51*404b540aSrobert l = .false. 52*404b540aSrobert!$omp parallel firstprivate (f3) reduction (.or.:l) num_threads (2) 53*404b540aSrobert l = any (f3 .ne. 'abcdef') 54*404b540aSrobert if (omp_get_thread_num () .eq. 0) f3 = 'ijklmn' 55*404b540aSrobert if (omp_get_thread_num () .eq. 1) f3 = 'IJKLMN' 56*404b540aSrobert!$omp barrier 57*404b540aSrobert l = l .or. (omp_get_thread_num () .eq. 0 .and. any (f3 .ne. 'ijklmn')) 58*404b540aSrobert l = l .or. (omp_get_thread_num () .eq. 1 .and. any (f3 .ne. 'IJKLMN')) 59*404b540aSrobert!$omp end parallel 60*404b540aSrobert f3 = 'zZzz_z' 61*404b540aSrobert!$omp parallel shared (f3) reduction (.or.:l) num_threads (2) 62*404b540aSrobert l = l .or. any (f3 .ne. 'zZzz_z') 63*404b540aSrobert!$omp barrier 64*404b540aSrobert!$omp master 65*404b540aSrobert f3 = 'abc' 66*404b540aSrobert!$omp end master 67*404b540aSrobert!$omp barrier 68*404b540aSrobert l = l .or. any (f3 .ne. 'abc') 69*404b540aSrobert!$omp barrier 70*404b540aSrobert if (omp_get_thread_num () .eq. 1) f3 = 'def' 71*404b540aSrobert!$omp barrier 72*404b540aSrobert l = l .or. any (f3 .ne. 'def') 73*404b540aSrobert!$omp end parallel 74*404b540aSrobert if (l) call abort 75*404b540aSrobert f3(1) = 'opqrst' 76*404b540aSrobert f3(2) = 'a' 77*404b540aSrobert end function f3 78*404b540aSrobert function f4 (n) 79*404b540aSrobert use omp_lib 80*404b540aSrobert character (n), dimension (n - 4) :: f4 81*404b540aSrobert logical :: l 82*404b540aSrobert f4 = 'abcdef' 83*404b540aSrobert l = .false. 84*404b540aSrobert!$omp parallel firstprivate (f4) reduction (.or.:l) num_threads (2) 85*404b540aSrobert l = any (f4 .ne. 'abcdef') 86*404b540aSrobert if (omp_get_thread_num () .eq. 0) f4 = 'ijklmn' 87*404b540aSrobert if (omp_get_thread_num () .eq. 1) f4 = 'IJKLMN' 88*404b540aSrobert!$omp barrier 89*404b540aSrobert l = l .or. (omp_get_thread_num () .eq. 0 .and. any (f4 .ne. 'ijklmn')) 90*404b540aSrobert l = l .or. (omp_get_thread_num () .eq. 1 .and. any (f4 .ne. 'IJKLMN')) 91*404b540aSrobert l = l .or. size (f4) .ne. 2 92*404b540aSrobert!$omp end parallel 93*404b540aSrobert f4 = 'zZzz_z' 94*404b540aSrobert!$omp parallel shared (f4) reduction (.or.:l) num_threads (2) 95*404b540aSrobert l = l .or. any (f4 .ne. 'zZzz_z') 96*404b540aSrobert!$omp barrier 97*404b540aSrobert!$omp master 98*404b540aSrobert f4 = 'abc' 99*404b540aSrobert!$omp end master 100*404b540aSrobert!$omp barrier 101*404b540aSrobert l = l .or. any (f4 .ne. 'abc') 102*404b540aSrobert!$omp barrier 103*404b540aSrobert if (omp_get_thread_num () .eq. 1) f4 = 'def' 104*404b540aSrobert!$omp barrier 105*404b540aSrobert l = l .or. any (f4 .ne. 'def') 106*404b540aSrobert l = l .or. size (f4) .ne. 2 107*404b540aSrobert!$omp end parallel 108*404b540aSrobert if (l) call abort 109*404b540aSrobert f4(1) = 'Opqrst' 110*404b540aSrobert f4(2) = 'A' 111*404b540aSrobert end function f4 112*404b540aSrobertend 113*404b540aSrobertfunction f2 (n) 114*404b540aSrobert use omp_lib 115*404b540aSrobert character (*) :: f2 116*404b540aSrobert logical :: l 117*404b540aSrobert f2 = 'abcdef' 118*404b540aSrobert l = .false. 119*404b540aSrobert!$omp parallel firstprivate (f2) reduction (.or.:l) num_threads (2) 120*404b540aSrobert l = f2 .ne. 'abcdef' 121*404b540aSrobert if (omp_get_thread_num () .eq. 0) f2 = 'ijklmn' 122*404b540aSrobert if (omp_get_thread_num () .eq. 1) f2 = 'IJKLMN' 123*404b540aSrobert!$omp barrier 124*404b540aSrobert l = l .or. (omp_get_thread_num () .eq. 0 .and. f2 .ne. 'ijklmn') 125*404b540aSrobert l = l .or. (omp_get_thread_num () .eq. 1 .and. f2 .ne. 'IJKLMN') 126*404b540aSrobert!$omp end parallel 127*404b540aSrobert f2 = 'zZzz_z' 128*404b540aSrobert!$omp parallel shared (f2) reduction (.or.:l) num_threads (2) 129*404b540aSrobert l = l .or. f2 .ne. 'zZzz_z' 130*404b540aSrobert!$omp barrier 131*404b540aSrobert!$omp master 132*404b540aSrobert f2 = 'abc' 133*404b540aSrobert!$omp end master 134*404b540aSrobert!$omp barrier 135*404b540aSrobert l = l .or. f2 .ne. 'abc' 136*404b540aSrobert!$omp barrier 137*404b540aSrobert if (omp_get_thread_num () .eq. 1) f2 = 'def' 138*404b540aSrobert!$omp barrier 139*404b540aSrobert l = l .or. f2 .ne. 'def' 140*404b540aSrobert!$omp end parallel 141*404b540aSrobert if (l) call abort 142*404b540aSrobert f2 = '_/!!/_' 143*404b540aSrobertend function f2 144