forked from OSchip/llvm-project
The device expression must evaluate to a non-negative integer value.
Device clause when it occurs with **target enter data** and **target exit data** must be declared with some non negative value. So some changes were made to evaluate the device clause argument to non negative value and throw the expected error when it takes negative value as argument. Reviewed By: clementval Differential Revision: https://reviews.llvm.org/D119141
This commit is contained in:
parent
446e7c64c7
commit
bea53eead1
|
@ -551,7 +551,7 @@ void DirectiveStructureChecker<D, C, PC,
|
|||
ClauseEnumSize>::RequiresPositiveParameter(const C &clause,
|
||||
const parser::ScalarIntExpr &i, llvm::StringRef paramName) {
|
||||
if (const auto v{GetIntValue(i)}) {
|
||||
if (*v <= 0) {
|
||||
if (*v < 0) {
|
||||
context_.Say(GetContext().clauseSource,
|
||||
"The %s of the %s clause must be "
|
||||
"a positive integer expression"_err_en_US,
|
||||
|
|
|
@ -1656,7 +1656,6 @@ CHECK_SIMPLE_CLAUSE(Default, OMPC_default)
|
|||
CHECK_SIMPLE_CLAUSE(Depobj, OMPC_depobj)
|
||||
CHECK_SIMPLE_CLAUSE(Destroy, OMPC_destroy)
|
||||
CHECK_SIMPLE_CLAUSE(Detach, OMPC_detach)
|
||||
CHECK_SIMPLE_CLAUSE(Device, OMPC_device)
|
||||
CHECK_SIMPLE_CLAUSE(DeviceType, OMPC_device_type)
|
||||
CHECK_SIMPLE_CLAUSE(DistSchedule, OMPC_dist_schedule)
|
||||
CHECK_SIMPLE_CLAUSE(DynamicAllocators, OMPC_dynamic_allocators)
|
||||
|
@ -1721,6 +1720,7 @@ CHECK_REQ_SCALAR_INT_CLAUSE(NumTeams, OMPC_num_teams)
|
|||
CHECK_REQ_SCALAR_INT_CLAUSE(NumThreads, OMPC_num_threads)
|
||||
CHECK_REQ_SCALAR_INT_CLAUSE(Priority, OMPC_priority)
|
||||
CHECK_REQ_SCALAR_INT_CLAUSE(ThreadLimit, OMPC_thread_limit)
|
||||
CHECK_REQ_SCALAR_INT_CLAUSE(Device, OMPC_device)
|
||||
|
||||
CHECK_REQ_CONSTANT_SCALAR_INT_CLAUSE(Collapse, OMPC_collapse)
|
||||
CHECK_REQ_CONSTANT_SCALAR_INT_CLAUSE(Safelen, OMPC_safelen)
|
||||
|
|
|
@ -556,4 +556,8 @@ use omp_lib
|
|||
do i = 1, N
|
||||
a = 3.14
|
||||
enddo
|
||||
|
||||
!$omp target enter data map(alloc:A) device(0)
|
||||
!$omp target exit data map(delete:A) device(0)
|
||||
|
||||
end program
|
||||
|
|
|
@ -129,6 +129,12 @@ program main
|
|||
enddo
|
||||
!$omp end target data
|
||||
|
||||
!ERROR: The parameter of the DEVICE clause must be a positive integer expression
|
||||
!$omp target enter data map(alloc:A) device(-2)
|
||||
|
||||
!ERROR: The parameter of the DEVICE clause must be a positive integer expression
|
||||
!$omp target exit data map(delete:A) device(-2)
|
||||
|
||||
!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.)
|
||||
|
||||
|
|
Loading…
Reference in New Issue