From 6ad37a41b5489ce66ea890bf92fca66ea1ae41e0 Mon Sep 17 00:00:00 2001 From: Kiran Chandramohan Date: Tue, 7 May 2024 08:13:32 +0100 Subject: [PATCH] [Flang][OpenMP] NFC: Trivial changes in OmpCycleChecker (#91024) Cycle is associated with construct-names and not labels. Change name of a few variables to reflect this. Also add appropriate comment to describe the else case of error checking. --- flang/lib/Semantics/check-omp-structure.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp index ab76fe59911b..70863c5f20e8 100644 --- a/flang/lib/Semantics/check-omp-structure.cpp +++ b/flang/lib/Semantics/check-omp-structure.cpp @@ -94,9 +94,10 @@ public: bool Pre(const parser::DoConstruct &dc) { cycleLevel_--; - const auto &labelName{std::get<0>(std::get<0>(dc.t).statement.t)}; - if (labelName) { - labelNamesandLevels_.emplace(labelName.value().ToString(), cycleLevel_); + const auto &constructName{std::get<0>(std::get<0>(dc.t).statement.t)}; + if (constructName) { + constructNamesAndLevels_.emplace( + constructName.value().ToString(), cycleLevel_); } return true; } @@ -105,10 +106,14 @@ public: std::map::iterator it; bool err{false}; if (cyclestmt.v) { - it = labelNamesandLevels_.find(cyclestmt.v->source.ToString()); - err = (it != labelNamesandLevels_.end() && it->second > 0); + it = constructNamesAndLevels_.find(cyclestmt.v->source.ToString()); + err = (it != constructNamesAndLevels_.end() && it->second > 0); + } else { + // If there is no label then the cycle statement is associated with the + // closest enclosing DO. Use its level for the checks. + err = cycleLevel_ > 0; } - if (cycleLevel_ > 0 || err) { + if (err) { context_.Say(*cycleSource_, "CYCLE statement to non-innermost associated loop of an OpenMP DO " "construct"_err_en_US); @@ -125,7 +130,7 @@ private: SemanticsContext &context_; const parser::CharBlock *cycleSource_; std::int64_t cycleLevel_; - std::map labelNamesandLevels_; + std::map constructNamesAndLevels_; }; bool OmpStructureChecker::IsCloselyNestedRegion(const OmpDirectiveSet &set) {