Skip to content

Commit c6deac6

Browse files
committed
[OpenMP 60] Initial parsing/sema for need_device_addr modifier on adjust_args clause
Adds initial parsing and semantic analysis for `need_device_addr` modifier on `adjust_args` clause. PR Link: #143442
1 parent dff24b0 commit c6deac6

File tree

3 files changed

+15
-7
lines changed

3 files changed

+15
-7
lines changed

clang/include/clang/Basic/DiagnosticParseKinds.td

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1582,8 +1582,9 @@ def err_omp_unexpected_append_op : Error<
15821582
def err_omp_unexpected_execution_modifier : Error<
15831583
"unexpected 'execution' modifier in non-executable context">;
15841584
def err_omp_unknown_adjust_args_op
1585-
: Error<"incorrect adjust_args type, expected 'need_device_ptr'%select{|, "
1586-
"'need_device_addr',}0 or 'nothing'">;
1585+
: Error<
1586+
"incorrect 'adjust_args' type, expected 'need_device_ptr'%select{|, "
1587+
"'need_device_addr',}0 or 'nothing'">;
15871588
def err_omp_declare_variant_wrong_clause : Error<
15881589
"expected %select{'match'|'match', 'adjust_args', or 'append_args'}0 clause "
15891590
"on 'omp declare variant' directive">;

clang/lib/Parse/ParseOpenMP.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1517,12 +1517,19 @@ void Parser::ParseOMPDeclareVariantClauses(Parser::DeclGroupPtrTy Ptr,
15171517
IsError = ParseOpenMPVarList(OMPD_declare_variant, OMPC_adjust_args,
15181518
Vars, Data);
15191519
if (!IsError) {
1520-
if (Data.ExtraModifier == OMPC_ADJUST_ARGS_nothing)
1520+
switch (Data.ExtraModifier) {
1521+
case OMPC_ADJUST_ARGS_nothing:
15211522
llvm::append_range(AdjustNothing, Vars);
1522-
else if (Data.ExtraModifier == OMPC_ADJUST_ARGS_need_device_ptr)
1523+
break;
1524+
case OMPC_ADJUST_ARGS_need_device_ptr:
15231525
llvm::append_range(AdjustNeedDevicePtr, Vars);
1524-
else if (Data.ExtraModifier == OMPC_ADJUST_ARGS_need_device_addr)
1526+
break;
1527+
case OMPC_ADJUST_ARGS_need_device_addr:
15251528
llvm::append_range(AdjustNeedDeviceAddr, Vars);
1529+
break;
1530+
default:
1531+
break;
1532+
}
15261533
}
15271534
break;
15281535
}

clang/test/OpenMP/declare_variant_clauses_messages.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,12 +196,12 @@ void vararg_bar2(const char *fmt) { return; }
196196
// expected-error@+1 {{variant in '#pragma omp declare variant' with type 'void (float *, float *, int *, omp_interop_t)' (aka 'void (float *, float *, int *, void *)') is incompatible with type 'void (float *, float *, int *)'}}
197197
#pragma omp declare variant(foo_v4) match(construct={dispatch})
198198

199-
// expected-error@+3 {{incorrect adjust_args type, expected 'need_device_ptr', 'need_device_addr', or 'nothing'}}
199+
// expected-error@+3 {{incorrect 'adjust_args' type, expected 'need_device_ptr', 'need_device_addr', or 'nothing'}}
200200
#pragma omp declare variant(foo_v1) \
201201
match(construct={dispatch}, device={arch(arm)}) \
202202
adjust_args(badaaop:AAA,BBB)
203203

204-
// expected-error@+3 {{incorrect adjust_args type, expected 'need_device_ptr', 'need_device_addr', or 'nothing'}}
204+
// expected-error@+3 {{incorrect 'adjust_args' type, expected 'need_device_ptr', 'need_device_addr', or 'nothing'}}
205205
#pragma omp declare variant(foo_v1) \
206206
match(construct={dispatch}, device={arch(arm)}) \
207207
adjust_args(badaaop AAA,BBB)

0 commit comments

Comments
 (0)