Again, this simplifies the semantic checks and lowering quite a bit. Update the check for positive alignment to use a more informative message, and to highlight the modifier itsef, not the whole clause. Remove the checks for the allocator expression itself being positive: there is nothing in the spec that says that it should be positive. Remove the "simple" modifier from the AllocateT template, since both simple and complex modifiers are the same thing, only differing in syntax.
57 lines
2.1 KiB
Fortran
57 lines
2.1 KiB
Fortran
! REQUIRES: openmp_runtime
|
|
|
|
! RUN: %python %S/../test_errors.py %s %flang_fc1 %openmp_flags -fopenmp-version=50
|
|
use omp_lib
|
|
!2.11.4 Allocate Clause
|
|
!For any list item that is specified in the allocate
|
|
!clause on a directive, a data-sharing attribute clause
|
|
!that may create a private copy of that list item must be
|
|
!specified on the same directive.
|
|
|
|
integer :: N = 2
|
|
|
|
!ERROR: The ALLOCATE clause requires that 'x' must be listed in a private data-sharing attribute clause on the same directive
|
|
!$omp parallel allocate(omp_default_mem_space : x)
|
|
do i = 1, N
|
|
x = 2
|
|
enddo
|
|
!$omp end parallel
|
|
|
|
!ERROR: The ALLOCATE clause requires that 'y' must be listed in a private data-sharing attribute clause on the same directive
|
|
!$omp parallel allocate(omp_default_mem_space : y) firstprivate(x)
|
|
do i = 1, N
|
|
x = 2
|
|
enddo
|
|
!$omp end parallel
|
|
|
|
!ERROR: The ALLOCATE clause requires that 'x' must be listed in a private data-sharing attribute clause on the same directive
|
|
!ERROR: The ALLOCATE clause requires that 'x' must be listed in a private data-sharing attribute clause on the same directive
|
|
!$omp parallel allocate(omp_default_mem_space : x) allocate(omp_default_mem_space : x)
|
|
do i = 1, N
|
|
x = 2
|
|
enddo
|
|
!$omp end parallel
|
|
|
|
!ERROR: The ALLOCATE clause requires that 'f' must be listed in a private data-sharing attribute clause on the same directive
|
|
!$omp parallel allocate(omp_default_mem_space : f) shared(f)
|
|
do i = 1, N
|
|
x = 2
|
|
enddo
|
|
!$omp end parallel
|
|
|
|
!ERROR: The ALLOCATE clause requires that 'q' must be listed in a private data-sharing attribute clause on the same directive
|
|
!$omp parallel private(t) allocate(omp_default_mem_space : z, t, q, r) firstprivate(z, r)
|
|
do i = 1, N
|
|
x = 2
|
|
enddo
|
|
!$omp end parallel
|
|
|
|
!ERROR: The ALLOCATE clause requires that 'b' must be listed in a private data-sharing attribute clause on the same directive
|
|
!ERROR: The ALLOCATE clause requires that 'c' must be listed in a private data-sharing attribute clause on the same directive
|
|
!$omp parallel allocate(omp_default_mem_space : a, b, c, d) firstprivate(a, d)
|
|
do i = 1, N
|
|
x = 2
|
|
enddo
|
|
!$omp end parallel
|
|
end
|