diff --git a/flang/lib/Lower/OpenMP.cpp b/flang/lib/Lower/OpenMP.cpp --- a/flang/lib/Lower/OpenMP.cpp +++ b/flang/lib/Lower/OpenMP.cpp @@ -191,8 +191,9 @@ // Handle attribute based clauses. for (const auto &clause : parallelOpClauseList.v) { if (const auto &defaultClause = - std::get_if(&clause.u)) { - switch (defaultClause->v) { + std::get_if(&clause.u)) { + const auto &ompDefaultClause{defaultClause->v}; + switch (ompDefaultClause.v) { case Fortran::parser::OmpDefaultClause::Type::Private: parallelOp.default_valAttr(firOpBuilder.getStringAttr( omp::stringifyClauseDefault(omp::ClauseDefault::defprivate))); diff --git a/flang/lib/Parser/openmp-parsers.cpp b/flang/lib/Parser/openmp-parsers.cpp --- a/flang/lib/Parser/openmp-parsers.cpp +++ b/flang/lib/Parser/openmp-parsers.cpp @@ -167,8 +167,8 @@ parenthesized(Parser{}))) || "COPYPRIVATE" >> construct(construct( (parenthesized(Parser{})))) || - "DEFAULT"_id >> - construct(parenthesized(Parser{})) || + "DEFAULT"_id >> construct(construct( + parenthesized(Parser{}))) || "DEFAULTMAP" >> construct(parenthesized(Parser{})) || "DEPEND" >> diff --git a/flang/lib/Parser/unparse.cpp b/flang/lib/Parser/unparse.cpp --- a/flang/lib/Parser/unparse.cpp +++ b/flang/lib/Parser/unparse.cpp @@ -2058,11 +2058,6 @@ }, x.u); } - bool Pre(const OmpDefaultClause &) { - Word("DEFAULT("); - return true; - } - void Post(const OmpDefaultClause &) { Put(")"); } bool Pre(const OmpProcBindClause &) { Word("PROC_BIND("); return true; diff --git a/flang/lib/Semantics/check-omp-structure.h b/flang/lib/Semantics/check-omp-structure.h --- a/flang/lib/Semantics/check-omp-structure.h +++ b/flang/lib/Semantics/check-omp-structure.h @@ -137,6 +137,7 @@ void Enter(const parser::OmpClause::Collapse &); void Enter(const parser::OmpClause::Copyin &); void Enter(const parser::OmpClause::Copyprivate &); + void Enter(const parser::OmpClause::Default &); void Enter(const parser::OmpClause::Device &); void Enter(const parser::OmpClause::Final &); void Enter(const parser::OmpClause::Firstprivate &); @@ -175,7 +176,6 @@ void Enter(const parser::OmpAtomicCapture &); void Leave(const parser::OmpAtomic &); void Enter(const parser::OmpAlignedClause &); - void Enter(const parser::OmpDefaultClause &); void Enter(const parser::OmpDefaultmapClause &); void Enter(const parser::OmpDependClause &); void Enter(const parser::OmpDistScheduleClause &); diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp --- a/flang/lib/Semantics/check-omp-structure.cpp +++ b/flang/lib/Semantics/check-omp-structure.cpp @@ -406,6 +406,7 @@ CHECK_SIMPLE_CLAUSE(Allocate, OMPC_allocate) CHECK_SIMPLE_CLAUSE(Copyin, OMPC_copyin) CHECK_SIMPLE_CLAUSE(Copyprivate, OMPC_copyprivate) +CHECK_SIMPLE_CLAUSE(Default, OMPC_default) CHECK_SIMPLE_CLAUSE(Device, OMPC_device) CHECK_SIMPLE_CLAUSE(Final, OMPC_final) CHECK_SIMPLE_CLAUSE(Firstprivate, OMPC_firstprivate) @@ -490,7 +491,6 @@ } } // Following clauses have a seperate node in parse-tree.h. -CHECK_SIMPLE_PARSER_CLAUSE(OmpDefaultClause, OMPC_default) CHECK_SIMPLE_PARSER_CLAUSE(OmpDistScheduleClause, OMPC_dist_schedule) CHECK_SIMPLE_PARSER_CLAUSE(OmpNowait, OMPC_nowait) CHECK_SIMPLE_PARSER_CLAUSE(OmpProcBindClause, OMPC_proc_bind) diff --git a/llvm/include/llvm/Frontend/OpenMP/OMP.td b/llvm/include/llvm/Frontend/OpenMP/OMP.td --- a/llvm/include/llvm/Frontend/OpenMP/OMP.td +++ b/llvm/include/llvm/Frontend/OpenMP/OMP.td @@ -62,7 +62,7 @@ } def OMPC_Default : Clause<"default"> { let clangClass = "OMPDefaultClause"; - let flangClass = "OmpDefaultClause"; + let flangClassValue = "OmpDefaultClause"; } def OMPC_Private : Clause<"private"> { let clangClass = "OMPPrivateClause";