@@ -1569,9 +1569,10 @@ void OmpStructureChecker::Leave(const parser::OpenMPDeclareTargetConstruct &x) {
15691569 },
15701570 [&](const parser::OmpClause::Enter &enterClause) {
15711571 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);
15751576 },
15761577 [&](const parser::OmpClause::DeviceType &deviceTypeClause) {
15771578 deviceTypeClauseFound = true ;
@@ -4029,7 +4030,11 @@ void OmpStructureChecker::Enter(const parser::OmpClause::HasDeviceAddr &x) {
40294030
40304031void OmpStructureChecker::Enter (const parser::OmpClause::Enter &x) {
40314032 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 )};
40334038 SymbolSourceMap symbols;
40344039 GetSymbolsInObjectList (objList, symbols);
40354040 for (const auto &[symbol, source] : symbols) {
@@ -4489,17 +4494,18 @@ const parser::OmpObjectList *OmpStructureChecker::GetOmpObjectList(
44894494 const parser::OmpClause &clause) {
44904495
44914496 // 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>;
44974502
44984503 // 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>;
45034509
45044510 // TODO:: Generate the tuples using TableGen.
45054511 // Handle other constructs with OmpObjectList such as OpenMPThreadprivate.
0 commit comments