! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp ! OpenMP Version 4.5 ! 2.15.3.4 firstprivate Clause ! Variables that appear in a firstprivate clause on a distribute or ! worksharing constructs must not appear in the private or ! reduction clause in a teams or parallel constructs in the outer context program omp_firstprivate integer :: i, a(10), b(10), c(10) a = 10 b = 20 !ERROR: TARGET construct with nested TEAMS region contains statements or directives outside of the TEAMS construct !$omp target !$omp teams private(a, b) !ERROR: FIRSTPRIVATE variable 'a' is PRIVATE in outer context !$omp distribute firstprivate(a) do i = 1, 10 a(i) = a(i) + b(i) - i end do !$omp end distribute !$omp end teams !$omp teams reduction(+:a) !ERROR: FIRSTPRIVATE variable 'a' is PRIVATE in outer context !$omp distribute firstprivate(a) do i = 1, 10 b(i) = b(i) + a(i) + i end do !$omp end distribute !$omp end teams !$omp end target print *, a, b !$omp parallel private(a,b) !ERROR: FIRSTPRIVATE variable 'b' is PRIVATE in outer context !$omp do firstprivate(b) do i = 1, 10 c(i) = a(i) + b(i) + i end do !$omp end do !$omp end parallel !$omp parallel reduction(-:a) !ERROR: FIRSTPRIVATE variable 'a' is PRIVATE in outer context !$omp do firstprivate(a,b) do i = 1, 10 c(i) = c(i) - a(i) * b(i) * i end do !$omp end do !$omp end parallel !$omp parallel reduction(+:a) !ERROR: FIRSTPRIVATE variable 'a' is PRIVATE in outer context !$omp sections firstprivate(a, b) !$omp section c = c * a + b !$omp end sections !$omp end parallel !$omp parallel reduction(-:a) !ERROR: FIRSTPRIVATE variable 'a' is PRIVATE in outer context !$omp task firstprivate(a,b) c = c - a * b !$omp end task !$omp end parallel !$omp parallel reduction(+:b) !ERROR: FIRSTPRIVATE variable 'b' is PRIVATE in outer context !$omp taskloop firstprivate(b) do i = 1, 10 c(i) = a(i) + b(i) + i a = a+i b = b-i end do !$omp end taskloop !$omp end parallel !$omp parallel firstprivate(a) !ERROR: FIRSTPRIVATE variable 'a' is PRIVATE in outer context !$omp single firstprivate(a) print *, a !$omp end single !$omp end parallel print *, c end program omp_firstprivate