! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp ! OpenMP Version 5.2 ! 5.1.1 - Variables Referenced in a Construct ! Copyprivate must accept variables that are predetermined as private. module m1 integer :: m end module program omp_copyprivate use m1 implicit none integer :: i integer, save :: j integer :: k common /c/ k real, parameter :: pi = 3.14 integer :: a1(10) ! Local variables are private. !$omp single i = 123 !$omp end single copyprivate(i) !$omp single !$omp end single copyprivate(a1) ! Variables with the SAVE attribute are not private. !$omp single !ERROR: COPYPRIVATE variable 'j' is not PRIVATE or THREADPRIVATE in outer context !$omp end single copyprivate(j) ! Common block variables are not private. !$omp single !ERROR: COPYPRIVATE variable 'k' is not PRIVATE or THREADPRIVATE in outer context !$omp end single copyprivate(/c/) !$omp single !ERROR: COPYPRIVATE variable 'k' is not PRIVATE or THREADPRIVATE in outer context !$omp end single copyprivate(k) ! Module variables are not private. !$omp single !ERROR: COPYPRIVATE variable 'm' is not PRIVATE or THREADPRIVATE in outer context !$omp end single copyprivate(m) ! Parallel can make a variable shared. !$omp parallel !$omp single i = 456 !ERROR: COPYPRIVATE variable 'i' is not PRIVATE or THREADPRIVATE in outer context !$omp end single copyprivate(i) call sub(j, a1) !$omp end parallel !$omp parallel shared(i) !$omp single i = 456 !ERROR: COPYPRIVATE variable 'i' is not PRIVATE or THREADPRIVATE in outer context !$omp end single copyprivate(i) !$omp end parallel !FIXME: an error should be emitted in this case. ! copyprivate(i) should be considered as a reference to i and a new ! symbol should be created in `parallel` scope, for this case to be ! handled properly. !$omp parallel !$omp single !$omp end single copyprivate(i) !$omp end parallel ! Named constants are shared. !$omp single !ERROR: COPYPRIVATE variable 'pi' is not PRIVATE or THREADPRIVATE in outer context !$omp end single copyprivate(pi) !$omp parallel do do i = 1, 10 !$omp parallel !$omp single j = i !ERROR: COPYPRIVATE variable 'i' is not PRIVATE or THREADPRIVATE in outer context !$omp end single copyprivate(i) !$omp end parallel end do !$omp end parallel do contains subroutine sub(s1, a) integer :: s1 integer :: a(:) ! Dummy argument. !$omp single !$omp end single copyprivate(s1) ! Assumed shape arrays are shared. !$omp single !ERROR: COPYPRIVATE variable 'a' is not PRIVATE or THREADPRIVATE in outer context !$omp end single copyprivate(a) end subroutine integer function fun(f1) integer :: f1 ! Dummy argument. !$omp single !$omp end single copyprivate(f1) ! Function result is private. !$omp single !$omp end single copyprivate(fun) end function end program