1! { dg-do compile } 2 3SUBROUTINE foo(n,array) 4 IMPLICIT NONE 5 INTEGER, INTENT (IN) :: n 6 REAL, INTENT(INOUT),OPTIONAL:: array(:) 7 INTEGER:: i 8 9 !$OMP PARALLEL DO DEFAULT(none) SHARED(array,n) PRIVATE(i) 10 DO i = 1,n 11 IF (PRESENT(array)) THEN 12 array(i) = array(i) + i 13 ENDIF 14 ENDDO 15 !$OMP END PARALLEL DO 16END SUBROUTINE foo 17 18subroutine s1 (array) 19 real, optional :: array(:) 20 !$omp parallel default(none) firstprivate (array) 21 if (present (array)) array(:) = 3 22 !$omp end parallel 23end subroutine 24 25subroutine s2 (array) 26 real, optional :: array(:) 27 !$omp parallel default(none) shared (array) 28 !$omp master 29 if (present (array)) array(:) = 3 30 !$omp end master 31 !$omp end parallel 32end subroutine 33 34subroutine s3 (array) 35 real, optional :: array(:) 36 !$omp parallel default(none) private (array) 37 if (present (array)) array(:) = 3 38 !$omp end parallel 39end subroutine 40 41subroutine s4 (arg) 42 real, optional :: arg 43 !$omp parallel default(none) firstprivate (arg) 44 if (present (arg)) arg = 3 45 !$omp end parallel 46end subroutine 47 48subroutine s5 (arg) 49 real, optional :: arg 50 !$omp parallel default(none) shared (arg) 51 !$omp master 52 if (present (arg)) arg = 3 53 !$omp end master 54 !$omp end parallel 55end subroutine 56 57subroutine s6 (arg) 58 real, optional :: arg 59 !$omp parallel default(none) private (arg) 60 if (present (arg)) arg = 3 61 !$omp end parallel 62end subroutine 63 64subroutine s7 (arg) 65 real, value, optional :: arg 66 !$omp parallel default(none) firstprivate (arg) 67 if (present (arg)) arg = 3 68 !$omp end parallel 69end subroutine 70 71subroutine s8 (arg) 72 real, value, optional :: arg 73 !$omp parallel default(none) shared (arg) 74 !$omp master 75 if (present (arg)) arg = 3 76 !$omp end master 77 !$omp end parallel 78end subroutine 79 80subroutine s9 (arg) 81 real, value, optional :: arg 82 !$omp parallel default(none) private (arg) 83 if (present (arg)) arg = 3 84 !$omp end parallel 85end subroutine 86 87subroutine s10 (arg) 88 real, optional :: arg(..) 89 !$omp parallel default(none) private (arg) 90 if (present (arg)) stop 10 91 !$omp end parallel 92end subroutine 93 94subroutine w1 (array) 95 real, optional :: array(:) 96 !$omp parallel default(none) ! { dg-message "note: enclosing 'parallel'" } 97 if (.not.present (array)) stop 1 ! { dg-error "'array' not specified in enclosing 'parallel'" } 98 !$omp end parallel 99end subroutine 100 101subroutine w2 (array2) 102 real, optional :: array2(*) 103 !$omp parallel default(none) ! { dg-message "note: enclosing 'parallel'" "TODO" { xfail *-*-* } } 104 if (.not.present (array2)) stop 2 ! { dg-error "'array2' not specified in enclosing 'parallel'" "TODO" { xfail *-*-* } } 105 !$omp end parallel 106end subroutine 107 108subroutine w3 (arg) 109 real, optional :: arg 110 !$omp parallel default(none) ! { dg-message "note: enclosing 'parallel'" } 111 if (.not.present (arg)) stop 3 ! { dg-error "'arg' not specified in enclosing 'parallel'" } 112 !$omp end parallel 113end subroutine 114 115subroutine w4 (arg2) 116 real, value, optional :: arg2 117 !$omp parallel default(none) ! { dg-message "note: enclosing 'parallel" "TODO" { xfail *-*-* } } 118 if (.not.present (arg2)) stop 4 ! { dg-error "'arg2' not specified in enclosing 'parallel'" "TODO" { xfail *-*-*} } 119 !$omp end parallel 120end subroutine 121 122subroutine w5 (array3) 123 real, optional :: array3(..) 124 !$omp parallel default(none) ! { dg-message "note: enclosing 'parallel'" } 125 if (.not.present (array3)) stop 5 ! { dg-error "'array3' not specified in enclosing 'parallel'" } 126 !$omp end parallel 127end subroutine 128