| !RUN: %python %S/../test_errors.py %s %flang -fopenmp | |
| subroutine test_cray_pointer_usage | |
| implicit none | |
| integer :: i | |
| real(8) :: var(*), pointee(2) | |
| pointer(ivar, var) | |
| ! WARNING: DECLARE SIMD directive is not implemented yet and will be ignored | |
| ! ERROR: Cray Pointee 'var' may not appear in LINEAR clause | |
| ! ERROR: List item 'var' in LINEAR clause must be a scalar variable | |
| ! ERROR: The list item 'var' specified without the REF 'linear-modifier' must be of INTEGER type | |
| ! ERROR: The list item `var` must be a dummy argument | |
| ! ERROR: A whole assumed-size array is not allowed as a list item on LINEAR clause | |
| !$omp declare simd linear(var) | |
| pointee = 42.0 | |
| ivar = loc(pointee) | |
| !$omp parallel num_threads(2) default(none) | |
| ! ERROR: The DEFAULT(NONE) clause requires that the Cray Pointer 'ivar' must be listed in a data-sharing attribute clause | |
| print *, var(1) | |
| !$omp end parallel | |
| ! ERROR: Cray Pointee 'var' may not appear in PRIVATE clause, use Cray Pointer 'ivar' instead | |
| ! ERROR: A whole assumed-size array is not allowed as a list item on PRIVATE clause | |
| !$omp parallel num_threads(2) default(none) private(var) | |
| print *, var(1) | |
| !$omp end parallel | |
| ! ERROR: Cray Pointee 'var' may not appear in SHARED clause, use Cray Pointer 'ivar' instead | |
| !$omp parallel num_threads(2) default(none) shared(var) | |
| print *, var(1) | |
| !$omp end parallel | |
| ! ERROR: Cray Pointee 'var' may not appear in LASTPRIVATE clause, use Cray Pointer 'ivar' instead | |
| ! ERROR: A whole assumed-size array is not allowed as a list item on LASTPRIVATE clause | |
| !$omp do lastprivate(var) | |
| do i = 1, 10 | |
| print *, var(1) | |
| end do | |
| !$omp end do | |
| !$omp parallel num_threads(2) default(none) firstprivate(ivar) | |
| print *, var(1) | |
| !$omp end parallel | |
| !$omp parallel num_threads(2) default(private) shared(ivar) | |
| print *, var(1) | |
| !$omp end parallel | |
| end subroutine test_cray_pointer_usage | |
| subroutine test_nested_cray_pointer | |
| implicit none | |
| real :: X, B | |
| pointer(P, B) | |
| X = 1.0 | |
| P = loc(X) | |
| !$omp parallel default(none) shared(P, X) | |
| !$omp critical | |
| B = B + 2.0 | |
| !$omp end critical | |
| !$omp end parallel | |
| !$omp parallel default(none) shared(P, X) | |
| !$omp parallel default(none) | |
| ! ERROR: The DEFAULT(NONE) clause requires that the Cray Pointer 'p' must be listed in a data-sharing attribute clause | |
| B = B + 1.0 | |
| !$omp end parallel | |
| !$omp end parallel | |
| !$omp parallel default(none) shared(P, X) | |
| !$omp parallel default(none) shared(P, X) | |
| B = B + 1.0 | |
| !$omp end parallel | |
| !$omp end parallel | |
| !$omp parallel default(none) | |
| ! ERROR: The DEFAULT(NONE) clause requires that the Cray Pointer 'p' must be listed in a data-sharing attribute clause | |
| !$omp parallel default(none) shared(P) | |
| B = B + 1.0 | |
| !$omp end parallel | |
| !$omp end parallel | |
| end subroutine test_nested_cray_pointer |