@@ -1568,9 +1568,10 @@ void OmpStructureChecker::Leave(const parser::OpenMPDeclareTargetConstruct &x) {
15681568 },
15691569 [&](const parser::OmpClause::Enter &enterClause) {
15701570 enterClauseFound = true ;
1571- CheckSymbolNames (dir.source , enterClause.v );
1572- CheckVarIsNotPartOfAnotherVar (dir.source , enterClause.v );
1573- CheckThreadprivateOrDeclareTargetVar (enterClause.v );
1571+ auto &objList{std::get<parser::OmpObjectList>(enterClause.v .t )};
1572+ CheckSymbolNames (dir.source , objList);
1573+ CheckVarIsNotPartOfAnotherVar (dir.source , objList);
1574+ CheckThreadprivateOrDeclareTargetVar (objList);
15741575 },
15751576 [&](const parser::OmpClause::DeviceType &deviceTypeClause) {
15761577 deviceTypeClauseFound = true ;
@@ -4028,7 +4029,11 @@ void OmpStructureChecker::Enter(const parser::OmpClause::HasDeviceAddr &x) {
40284029
40294030void OmpStructureChecker::Enter (const parser::OmpClause::Enter &x) {
40304031 CheckAllowedClause (llvm::omp::Clause::OMPC_enter);
4031- const parser::OmpObjectList &objList{x.v };
4032+ if (!OmpVerifyModifiers (
4033+ x.v , llvm::omp::OMPC_enter, GetContext ().clauseSource , context_)) {
4034+ return ;
4035+ }
4036+ const parser::OmpObjectList &objList{std::get<parser::OmpObjectList>(x.v .t )};
40324037 SymbolSourceMap symbols;
40334038 GetSymbolsInObjectList (objList, symbols);
40344039 for (const auto &[symbol, source] : symbols) {
@@ -4488,17 +4493,18 @@ const parser::OmpObjectList *OmpStructureChecker::GetOmpObjectList(
44884493 const parser::OmpClause &clause) {
44894494
44904495 // Clauses with OmpObjectList as its data member
4491- using MemberObjectListClauses = std::tuple<parser::OmpClause::Copyprivate,
4492- parser::OmpClause::Copyin , parser::OmpClause::Enter ,
4493- parser::OmpClause::Firstprivate, parser::OmpClause::Link,
4494- parser::OmpClause::Private, parser::OmpClause::Shared,
4495- parser::OmpClause::UseDevicePtr, parser::OmpClause::UseDeviceAddr>;
4496+ using MemberObjectListClauses =
4497+ std::tuple< parser::OmpClause::Copyprivate , parser::OmpClause::Copyin ,
4498+ parser::OmpClause::Firstprivate, parser::OmpClause::Link,
4499+ parser::OmpClause::Private, parser::OmpClause::Shared,
4500+ parser::OmpClause::UseDevicePtr, parser::OmpClause::UseDeviceAddr>;
44964501
44974502 // Clauses with OmpObjectList in the tuple
4498- using TupleObjectListClauses = std::tuple<parser::OmpClause::Aligned,
4499- parser::OmpClause::Allocate, parser::OmpClause::From,
4500- parser::OmpClause::Lastprivate, parser::OmpClause::Map,
4501- parser::OmpClause::Reduction, parser::OmpClause::To>;
4503+ using TupleObjectListClauses =
4504+ std::tuple<parser::OmpClause::Aligned, parser::OmpClause::Allocate,
4505+ parser::OmpClause::From, parser::OmpClause::Lastprivate,
4506+ parser::OmpClause::Map, parser::OmpClause::Reduction,
4507+ parser::OmpClause::To, parser::OmpClause::Enter>;
45024508
45034509 // TODO:: Generate the tuples using TableGen.
45044510 // Handle other constructs with OmpObjectList such as OpenMPThreadprivate.
0 commit comments