forked from OSchip/llvm-project
186 lines
4.2 KiB
Fortran
186 lines
4.2 KiB
Fortran
! RUN: %B/test/Semantics/test_errors.sh %s %flang %t
|
|
! OPTIONS: -fopenmp
|
|
! Check OpenMP clause validity for the following directives:
|
|
! 2.10 Device constructs
|
|
program main
|
|
|
|
real(8) :: arrayA(256), arrayB(256)
|
|
integer :: N
|
|
|
|
arrayA = 1.414
|
|
arrayB = 3.14
|
|
N = 256
|
|
|
|
!$omp target map(arrayA)
|
|
do i = 1, N
|
|
a = 3.14
|
|
enddo
|
|
!$omp end target
|
|
|
|
!$omp target device(0)
|
|
do i = 1, N
|
|
a = 3.14
|
|
enddo
|
|
!$omp end target
|
|
|
|
!ERROR: At most one DEVICE clause can appear on the TARGET directive
|
|
!$omp target device(0) device(1)
|
|
do i = 1, N
|
|
a = 3.14
|
|
enddo
|
|
!$omp end target
|
|
|
|
!ERROR: SCHEDULE clause is not allowed on the TARGET directive
|
|
!$omp target schedule(static)
|
|
do i = 1, N
|
|
a = 3.14
|
|
enddo
|
|
!$omp end target
|
|
|
|
!$omp target defaultmap(tofrom:scalar)
|
|
do i = 1, N
|
|
a = 3.14
|
|
enddo
|
|
!$omp end target
|
|
|
|
!ERROR: The argument TOFROM:SCALAR must be specified on the DEFAULTMAP clause
|
|
!$omp target defaultmap(tofrom)
|
|
do i = 1, N
|
|
a = 3.14
|
|
enddo
|
|
!$omp end target
|
|
|
|
!ERROR: At most one DEFAULTMAP clause can appear on the TARGET directive
|
|
!$omp target defaultmap(tofrom:scalar) defaultmap(tofrom:scalar)
|
|
do i = 1, N
|
|
a = 3.14
|
|
enddo
|
|
!$omp end target
|
|
|
|
!$omp teams num_teams(3) thread_limit(10) default(shared) private(i) shared(a)
|
|
do i = 1, N
|
|
a = 3.14
|
|
enddo
|
|
!$omp end teams
|
|
|
|
!ERROR: At most one NUM_TEAMS clause can appear on the TEAMS directive
|
|
!$omp teams num_teams(2) num_teams(3)
|
|
do i = 1, N
|
|
a = 3.14
|
|
enddo
|
|
!$omp end teams
|
|
|
|
!ERROR: The parameter of the NUM_TEAMS clause must be a positive integer expression
|
|
!$omp teams num_teams(-1)
|
|
do i = 1, N
|
|
a = 3.14
|
|
enddo
|
|
!$omp end teams
|
|
|
|
!ERROR: At most one THREAD_LIMIT clause can appear on the TEAMS directive
|
|
!$omp teams thread_limit(2) thread_limit(3)
|
|
do i = 1, N
|
|
a = 3.14
|
|
enddo
|
|
!$omp end teams
|
|
|
|
!ERROR: The parameter of the THREAD_LIMIT clause must be a positive integer expression
|
|
!$omp teams thread_limit(-1)
|
|
do i = 1, N
|
|
a = 3.14
|
|
enddo
|
|
!$omp end teams
|
|
|
|
!ERROR: At most one DEFAULT clause can appear on the TEAMS directive
|
|
!$omp teams default(shared) default(private)
|
|
do i = 1, N
|
|
a = 3.14
|
|
enddo
|
|
!$omp end teams
|
|
|
|
!$omp target teams num_teams(2) defaultmap(tofrom:scalar)
|
|
do i = 1, N
|
|
a = 3.14
|
|
enddo
|
|
!$omp end target teams
|
|
|
|
!$omp target map(tofrom:a)
|
|
do i = 1, N
|
|
a = 3.14
|
|
enddo
|
|
!$omp end target
|
|
|
|
!ERROR: Only the TO, FROM, TOFROM, or ALLOC map types are permitted for MAP clauses on the TARGET directive
|
|
!$omp target map(delete:a)
|
|
do i = 1, N
|
|
a = 3.14
|
|
enddo
|
|
!$omp end target
|
|
|
|
!$omp target data device(0) map(to:a)
|
|
do i = 1, N
|
|
a = 3.14
|
|
enddo
|
|
!$omp end target data
|
|
|
|
!ERROR: At least one MAP clause must appear on the TARGET DATA directive
|
|
!$omp target data device(0)
|
|
do i = 1, N
|
|
a = 3.14
|
|
enddo
|
|
!$omp end target data
|
|
|
|
!ERROR: At most one IF clause can appear on the TARGET ENTER DATA directive
|
|
!$omp target enter data map(to:a) if(.true.) if(.false.)
|
|
|
|
!ERROR: Only the TO or ALLOC map types are permitted for MAP clauses on the TARGET ENTER DATA directive
|
|
!$omp target enter data map(from:a)
|
|
|
|
!$omp target exit data map(delete:a)
|
|
|
|
!ERROR: At most one DEVICE clause can appear on the TARGET EXIT DATA directive
|
|
!$omp target exit data map(from:a) device(0) device(1)
|
|
|
|
!ERROR: Only the FROM, RELEASE, or DELETE map types are permitted for MAP clauses on the TARGET EXIT DATA directive
|
|
!$omp target exit data map(to:a)
|
|
|
|
!$omp target
|
|
!$omp distribute
|
|
do i = 1, N
|
|
a = 3.14
|
|
enddo
|
|
!$omp end distribute
|
|
!$omp end target
|
|
|
|
!$omp target
|
|
!ERROR: At most one COLLAPSE clause can appear on the DISTRIBUTE directive
|
|
!$omp distribute collapse(2) collapse(3)
|
|
do i = 1, N
|
|
do j = 1, N
|
|
do k = 1, N
|
|
a = 3.14
|
|
enddo
|
|
enddo
|
|
enddo
|
|
!$omp end distribute
|
|
!$omp end target
|
|
|
|
!$omp target
|
|
!$omp distribute dist_schedule(static, 2)
|
|
do i = 1, N
|
|
a = 3.14
|
|
enddo
|
|
!$omp end distribute
|
|
!$omp end target
|
|
|
|
!$omp target
|
|
!ERROR: At most one DIST_SCHEDULE clause can appear on the DISTRIBUTE directive
|
|
!$omp distribute dist_schedule(static, 2) dist_schedule(static, 3)
|
|
do i = 1, N
|
|
a = 3.14
|
|
enddo
|
|
!$omp end distribute
|
|
!$omp end target
|
|
|
|
end program main
|