[flang-commits] [flang] 6ad37a4 - [Flang][OpenMP] NFC: Trivial changes in OmpCycleChecker (#91024)

via flang-commits flang-commits at lists.llvm.org
Tue May 7 00:13:35 PDT 2024


Author: Kiran Chandramohan
Date: 2024-05-07T08:13:32+01:00
New Revision: 6ad37a41b5489ce66ea890bf92fca66ea1ae41e0

URL: https://github.com/llvm/llvm-project/commit/6ad37a41b5489ce66ea890bf92fca66ea1ae41e0
DIFF: https://github.com/llvm/llvm-project/commit/6ad37a41b5489ce66ea890bf92fca66ea1ae41e0.diff

LOG: [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.

Added: 
    

Modified: 
    flang/lib/Semantics/check-omp-structure.cpp

Removed: 
    


################################################################################
diff  --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp
index ab76fe59911b78..70863c5f20e891 100644
--- a/flang/lib/Semantics/check-omp-structure.cpp
+++ b/flang/lib/Semantics/check-omp-structure.cpp
@@ -94,9 +94,10 @@ class OmpCycleChecker {
 
   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 @@ class OmpCycleChecker {
     std::map<std::string, std::int64_t>::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 @@ class OmpCycleChecker {
   SemanticsContext &context_;
   const parser::CharBlock *cycleSource_;
   std::int64_t cycleLevel_;
-  std::map<std::string, std::int64_t> labelNamesandLevels_;
+  std::map<std::string, std::int64_t> constructNamesAndLevels_;
 };
 
 bool OmpStructureChecker::IsCloselyNestedRegion(const OmpDirectiveSet &set) {


        


More information about the flang-commits mailing list