@@ -1569,9 +1569,10 @@ void OmpStructureChecker::Leave(const parser::OpenMPDeclareTargetConstruct &x) {
1569
1569
},
1570
1570
[&](const parser::OmpClause::Enter &enterClause) {
1571
1571
enterClauseFound = true ;
1572
- CheckSymbolNames (dir.source , enterClause.v );
1573
- CheckVarIsNotPartOfAnotherVar (dir.source , enterClause.v );
1574
- CheckThreadprivateOrDeclareTargetVar (enterClause.v );
1572
+ auto &objList{std::get<parser::OmpObjectList>(enterClause.v .t )};
1573
+ CheckSymbolNames (dir.source , objList);
1574
+ CheckVarIsNotPartOfAnotherVar (dir.source , objList);
1575
+ CheckThreadprivateOrDeclareTargetVar (objList);
1575
1576
},
1576
1577
[&](const parser::OmpClause::DeviceType &deviceTypeClause) {
1577
1578
deviceTypeClauseFound = true ;
@@ -4029,7 +4030,11 @@ void OmpStructureChecker::Enter(const parser::OmpClause::HasDeviceAddr &x) {
4029
4030
4030
4031
void OmpStructureChecker::Enter (const parser::OmpClause::Enter &x) {
4031
4032
CheckAllowedClause (llvm::omp::Clause::OMPC_enter);
4032
- const parser::OmpObjectList &objList{x.v };
4033
+ if (!OmpVerifyModifiers (
4034
+ x.v , llvm::omp::OMPC_enter, GetContext ().clauseSource , context_)) {
4035
+ return ;
4036
+ }
4037
+ const parser::OmpObjectList &objList{std::get<parser::OmpObjectList>(x.v .t )};
4033
4038
SymbolSourceMap symbols;
4034
4039
GetSymbolsInObjectList (objList, symbols);
4035
4040
for (const auto &[symbol, source] : symbols) {
@@ -4489,17 +4494,18 @@ const parser::OmpObjectList *OmpStructureChecker::GetOmpObjectList(
4489
4494
const parser::OmpClause &clause) {
4490
4495
4491
4496
// Clauses with OmpObjectList as its data member
4492
- using MemberObjectListClauses = std::tuple<parser::OmpClause::Copyprivate,
4493
- parser::OmpClause::Copyin , parser::OmpClause::Enter ,
4494
- parser::OmpClause::Firstprivate, parser::OmpClause::Link,
4495
- parser::OmpClause::Private, parser::OmpClause::Shared,
4496
- parser::OmpClause::UseDevicePtr, parser::OmpClause::UseDeviceAddr>;
4497
+ using MemberObjectListClauses =
4498
+ std::tuple< parser::OmpClause::Copyprivate , parser::OmpClause::Copyin ,
4499
+ parser::OmpClause::Firstprivate, parser::OmpClause::Link,
4500
+ parser::OmpClause::Private, parser::OmpClause::Shared,
4501
+ parser::OmpClause::UseDevicePtr, parser::OmpClause::UseDeviceAddr>;
4497
4502
4498
4503
// Clauses with OmpObjectList in the tuple
4499
- using TupleObjectListClauses = std::tuple<parser::OmpClause::Aligned,
4500
- parser::OmpClause::Allocate, parser::OmpClause::From,
4501
- parser::OmpClause::Lastprivate, parser::OmpClause::Map,
4502
- parser::OmpClause::Reduction, parser::OmpClause::To>;
4504
+ using TupleObjectListClauses =
4505
+ std::tuple<parser::OmpClause::Aligned, parser::OmpClause::Allocate,
4506
+ parser::OmpClause::From, parser::OmpClause::Lastprivate,
4507
+ parser::OmpClause::Map, parser::OmpClause::Reduction,
4508
+ parser::OmpClause::To, parser::OmpClause::Enter>;
4503
4509
4504
4510
// TODO:: Generate the tuples using TableGen.
4505
4511
// Handle other constructs with OmpObjectList such as OpenMPThreadprivate.
0 commit comments