[flang-commits] [flang] a8c80fe - [flang][OpenMP] Clean up check-omp-structure.h, NFC (#192695)

via flang-commits flang-commits at lists.llvm.org
Fri Apr 17 09:49:35 PDT 2026


Author: Krzysztof Parzyszek
Date: 2026-04-17T11:49:30-05:00
New Revision: a8c80fe41fde8c66434af91fd5a0f2d3b71b28be

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

LOG: [flang][OpenMP] Clean up check-omp-structure.h, NFC (#192695)

Group declarations to make it clear in which of the check-omp-*.cpp
files a given function is defined.
Delete declarations that don't have corresponding definitions.
Rename private member variable to follow naming convention.

Added: 
    

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

Removed: 
    


################################################################################
diff  --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp
index bcce423f622aa..33ea727343cf4 100644
--- a/flang/lib/Semantics/check-omp-structure.cpp
+++ b/flang/lib/Semantics/check-omp-structure.cpp
@@ -1938,12 +1938,12 @@ void OmpStructureChecker::Enter(const parser::OmpAllocateDirective &x) {
   const parser::OmpDirectiveSpecification &beginSpec{x.BeginDir()};
   const parser::OmpDirectiveName &dirName{beginSpec.DirName()};
   PushContextAndClauseSets(dirName.source, dirName.v);
-  ++allocateDirectiveLevel;
+  ++allocateDirectiveLevel_;
 
   bool isExecutable{partStack_.back() == PartKind::ExecutionPart};
 
   unsigned version{context_.langOptions().OpenMPVersion};
-  if (isExecutable && allocateDirectiveLevel == 1 && version >= 52) {
+  if (isExecutable && allocateDirectiveLevel_ == 1 && version >= 52) {
     context_.Warn(common::UsageWarning::OpenMPUsage, dirName.source,
         "The executable form of the OpenMP ALLOCATE directive has been deprecated, please use ALLOCATORS instead"_warn_en_US);
   }
@@ -1984,11 +1984,11 @@ void OmpStructureChecker::Enter(const parser::OmpAllocateDirective &x) {
 
 void OmpStructureChecker::Leave(const parser::OmpAllocateDirective &x) {
   bool isExecutable{partStack_.back() == PartKind::ExecutionPart};
-  if (isExecutable && allocateDirectiveLevel == 1) {
+  if (isExecutable && allocateDirectiveLevel_ == 1) {
     CheckExecutableAllocateDirective(x);
   }
 
-  --allocateDirectiveLevel;
+  --allocateDirectiveLevel_;
   dirContext_.pop_back();
 }
 

diff  --git a/flang/lib/Semantics/check-omp-structure.h b/flang/lib/Semantics/check-omp-structure.h
index 7228464e75757..d3bbab6156f8b 100644
--- a/flang/lib/Semantics/check-omp-structure.h
+++ b/flang/lib/Semantics/check-omp-structure.h
@@ -184,34 +184,65 @@ class OmpStructureChecker : public OmpStructureCheckerBase {
 #include "llvm/Frontend/OpenMP/OMP.inc"
 
 private:
-  bool CheckAllowedClause(llvmOmpClause clause);
-  void CheckVariableListItem(const SymbolSourceMap &symbols);
-  void CheckDirectiveSpelling(
-      parser::CharBlock spelling, llvm::omp::Directive id);
-  void AnalyzeObject(const parser::OmpObject &object);
-  void AnalyzeObjects(const parser::OmpObjectList &objects);
-  void CheckMultipleOccurrence(semantics::UnorderedSymbolSet &listVars,
-      const std::list<parser::Name> &nameList, const parser::CharBlock &item,
-      const std::string &clauseName);
-  void CheckMultListItems();
-  void CheckStructureComponent(
-      const parser::OmpObjectList &objects, llvm::omp::Clause clauseId);
-  bool HasInvalidWorksharingNesting(
-      const parser::OmpDirectiveName &name, const OmpDirectiveSet &);
+  // Most of these functions are defined in check-omp-structure.cpp, but
+  // some groups have their own files.
 
-  bool IsCloselyNestedRegion(const OmpDirectiveSet &set);
-  bool IsNestedInDirective(llvm::omp::Directive directive);
-  bool IsCombinedParallelWorksharing(llvm::omp::Directive directive) const;
-  bool InTargetRegion();
-  void HasInvalidTeamsNesting(
-      const llvm::omp::Directive &dir, const parser::CharBlock &source);
+  // check-omp-atomic.cpp
+  void CheckStorageOverlap(const evaluate::Expr<evaluate::SomeType> &,
+      llvm::ArrayRef<evaluate::Expr<evaluate::SomeType>>, parser::CharBlock);
+  void ErrorShouldBeVariable(const MaybeExpr &expr, parser::CharBlock source);
+  void CheckAtomicType(SymbolRef sym, parser::CharBlock source,
+      std::string_view name, bool checkTypeOnPointer = true);
+  void CheckAtomicVariable(const evaluate::Expr<evaluate::SomeType> &,
+      parser::CharBlock, bool checkTypeOnPointer = true);
+  std::pair<const parser::ExecutionPartConstruct *,
+      const parser::ExecutionPartConstruct *>
+  CheckUpdateCapture(const parser::ExecutionPartConstruct *ec1,
+      const parser::ExecutionPartConstruct *ec2, parser::CharBlock source);
+  void CheckAtomicCaptureAssignment(const evaluate::Assignment &capture,
+      const SomeExpr &atom, parser::CharBlock source);
+  void CheckAtomicReadAssignment(
+      const evaluate::Assignment &read, parser::CharBlock source);
+  void CheckAtomicWriteAssignment(
+      const evaluate::Assignment &write, parser::CharBlock source);
+  std::optional<evaluate::Assignment> CheckAtomicUpdateAssignment(
+      const evaluate::Assignment &update, parser::CharBlock source);
+  std::pair<bool, bool> CheckAtomicUpdateAssignmentRhs(const SomeExpr &atom,
+      const SomeExpr &rhs, parser::CharBlock source, bool suppressDiagnostics);
+  void CheckAtomicConditionalUpdateAssignment(const SomeExpr &cond,
+      parser::CharBlock condSource, const evaluate::Assignment &assign,
+      parser::CharBlock assignSource);
+  void CheckAtomicConditionalUpdateStmt(
+      const AnalyzedCondStmt &update, parser::CharBlock source);
+  void CheckAtomicUpdateOnly(const parser::OpenMPAtomicConstruct &x,
+      const parser::Block &body, parser::CharBlock source);
+  void CheckAtomicConditionalUpdate(const parser::OpenMPAtomicConstruct &x,
+      const parser::Block &body, parser::CharBlock source);
+  void CheckAtomicUpdateCapture(const parser::OpenMPAtomicConstruct &x,
+      const parser::Block &body, parser::CharBlock source);
+  void CheckAtomicConditionalUpdateCapture(
+      const parser::OpenMPAtomicConstruct &x, const parser::Block &body,
+      parser::CharBlock source);
+  void CheckAtomicRead(const parser::OpenMPAtomicConstruct &x);
+  void CheckAtomicWrite(const parser::OpenMPAtomicConstruct &x);
+  void CheckAtomicUpdate(const parser::OpenMPAtomicConstruct &x);
+
+  // check-omp-loop.cpp
   void HasInvalidDistributeNesting(const parser::OpenMPLoopConstruct &x);
   void HasInvalidLoopBinding(const parser::OpenMPLoopConstruct &x);
-  bool HasRequires(llvm::omp::Clause req);
-  // specific clause related
-  void CheckAllowedMapTypes(
-      parser::OmpMapType::Value, llvm::ArrayRef<parser::OmpMapType::Value>);
+  void CheckSIMDNest(const parser::OpenMPConstruct &x);
+  void CheckRectangularNest(const parser::OmpDirectiveSpecification &spec,
+      const omp::LoopSequence &nest);
+  void CheckNestedConstruct(const parser::OpenMPLoopConstruct &x);
+  const parser::Name GetLoopIndex(const parser::DoConstruct *x);
+  void SetLoopInfo(const parser::OpenMPLoopConstruct &x);
+  void CheckIterationVariableType(const parser::OpenMPLoopConstruct &x);
+  std::int64_t GetOrdCollapseLevel(const parser::OpenMPLoopConstruct &x);
+  void CheckAssociatedLoopConstraints(const parser::OpenMPLoopConstruct &x);
+  void CheckScanModifier(const parser::OmpClause::Reduction &x);
+  void CheckDistLinear(const parser::OpenMPLoopConstruct &x);
 
+  // check-omp-metadirective.cpp
   const std::list<parser::OmpTraitProperty> &GetTraitPropertyList(
       const parser::OmpTraitSelector &);
   std::optional<llvm::omp::Clause> GetClauseFromProperty(
@@ -235,6 +266,32 @@ class OmpStructureChecker : public OmpStructureCheckerBase {
   void CheckTraitSimd(
       const parser::OmpTraitSetSelector &, const parser::OmpTraitSelector &);
 
+  // check-omp-structure.cpp
+  bool CheckAllowedClause(llvmOmpClause clause);
+  void CheckVariableListItem(const SymbolSourceMap &symbols);
+  void CheckDirectiveSpelling(
+      parser::CharBlock spelling, llvm::omp::Directive id);
+  void AnalyzeObject(const parser::OmpObject &object);
+  void AnalyzeObjects(const parser::OmpObjectList &objects);
+  void CheckMultipleOccurrence(semantics::UnorderedSymbolSet &listVars,
+      const std::list<parser::Name> &nameList, const parser::CharBlock &item,
+      const std::string &clauseName);
+  void CheckMultListItems();
+  void CheckStructureComponent(
+      const parser::OmpObjectList &objects, llvm::omp::Clause clauseId);
+  bool HasInvalidWorksharingNesting(
+      const parser::OmpDirectiveName &name, const OmpDirectiveSet &);
+
+  bool IsCloselyNestedRegion(const OmpDirectiveSet &set);
+  bool IsNestedInDirective(llvm::omp::Directive directive);
+  bool IsCombinedParallelWorksharing(llvm::omp::Directive directive) const;
+  bool InTargetRegion();
+  void HasInvalidTeamsNesting(
+      const llvm::omp::Directive &dir, const parser::CharBlock &source);
+  bool HasRequires(llvm::omp::Clause req);
+  void CheckAllowedMapTypes(
+      parser::OmpMapType::Value, llvm::ArrayRef<parser::OmpMapType::Value>);
+
   llvm::StringRef getClauseName(llvm::omp::Clause clause) override;
   llvm::StringRef getDirectiveName(llvm::omp::Directive directive) override;
 
@@ -244,8 +301,6 @@ class OmpStructureChecker : public OmpStructureCheckerBase {
   std::optional<IterTy> FindDuplicate(RangeTy &&);
 
   void CheckDependList(const parser::DataRef &);
-  void CheckDependArraySection(
-      const common::Indirection<parser::ArrayElement> &, const parser::Name &);
   void CheckDoacross(const parser::OmpDoacross &doa);
   void CheckDimsModifier(parser::CharBlock source, size_t numValues,
       const parser::OmpDimsModifier &x);
@@ -273,8 +328,6 @@ class OmpStructureChecker : public OmpStructureCheckerBase {
       SymbolSourceMap &, const llvm::omp::Clause);
   void CheckPrivateSymbolsInOuterCxt(
       SymbolSourceMap &, DirectivesClauseTriple &, const llvm::omp::Clause);
-  const parser::Name GetLoopIndex(const parser::DoConstruct *x);
-  void SetLoopInfo(const parser::OpenMPLoopConstruct &x);
   void CheckIsLoopIvPartOfClause(
       llvmOmpClause clause, const parser::OmpObjectList &ompObjectList);
   bool CheckTargetBlockOnlyTeams(const parser::Block &);
@@ -286,56 +339,7 @@ class OmpStructureChecker : public OmpStructureCheckerBase {
 
   void CheckIteratorRange(const parser::OmpIteratorSpecifier &x);
   void CheckIteratorModifier(const parser::OmpIterator &x);
-  void CheckIterationVariableType(const parser::OpenMPLoopConstruct &x);
-  void CheckDoWhile(const parser::OpenMPLoopConstruct &x);
-  void CheckAssociatedLoopConstraints(const parser::OpenMPLoopConstruct &x);
-  template <typename T, typename D> bool IsOperatorValid(const T &, const D &);
-
-  void CheckStorageOverlap(const evaluate::Expr<evaluate::SomeType> &,
-      llvm::ArrayRef<evaluate::Expr<evaluate::SomeType>>, parser::CharBlock);
-  void ErrorShouldBeVariable(const MaybeExpr &expr, parser::CharBlock source);
-  void CheckAtomicType(SymbolRef sym, parser::CharBlock source,
-      std::string_view name, bool checkTypeOnPointer = true);
-  void CheckAtomicVariable(const evaluate::Expr<evaluate::SomeType> &,
-      parser::CharBlock, bool checkTypeOnPointer = true);
-  std::pair<const parser::ExecutionPartConstruct *,
-      const parser::ExecutionPartConstruct *>
-  CheckUpdateCapture(const parser::ExecutionPartConstruct *ec1,
-      const parser::ExecutionPartConstruct *ec2, parser::CharBlock source);
-  void CheckAtomicCaptureAssignment(const evaluate::Assignment &capture,
-      const SomeExpr &atom, parser::CharBlock source);
-  void CheckAtomicReadAssignment(
-      const evaluate::Assignment &read, parser::CharBlock source);
-  void CheckAtomicWriteAssignment(
-      const evaluate::Assignment &write, parser::CharBlock source);
-  std::optional<evaluate::Assignment> CheckAtomicUpdateAssignment(
-      const evaluate::Assignment &update, parser::CharBlock source);
-  std::pair<bool, bool> CheckAtomicUpdateAssignmentRhs(const SomeExpr &atom,
-      const SomeExpr &rhs, parser::CharBlock source, bool suppressDiagnostics);
-  void CheckAtomicConditionalUpdateAssignment(const SomeExpr &cond,
-      parser::CharBlock condSource, const evaluate::Assignment &assign,
-      parser::CharBlock assignSource);
-  void CheckAtomicConditionalUpdateStmt(
-      const AnalyzedCondStmt &update, parser::CharBlock source);
-  void CheckAtomicUpdateOnly(const parser::OpenMPAtomicConstruct &x,
-      const parser::Block &body, parser::CharBlock source);
-  void CheckAtomicConditionalUpdate(const parser::OpenMPAtomicConstruct &x,
-      const parser::Block &body, parser::CharBlock source);
-  void CheckAtomicUpdateCapture(const parser::OpenMPAtomicConstruct &x,
-      const parser::Block &body, parser::CharBlock source);
-  void CheckAtomicConditionalUpdateCapture(
-      const parser::OpenMPAtomicConstruct &x, const parser::Block &body,
-      parser::CharBlock source);
-  void CheckAtomicRead(const parser::OpenMPAtomicConstruct &x);
-  void CheckAtomicWrite(const parser::OpenMPAtomicConstruct &x);
-  void CheckAtomicUpdate(const parser::OpenMPAtomicConstruct &x);
 
-  void CheckScanModifier(const parser::OmpClause::Reduction &x);
-  void CheckDistLinear(const parser::OpenMPLoopConstruct &x);
-  void CheckSIMDNest(const parser::OpenMPConstruct &x);
-  void CheckRectangularNest(const parser::OmpDirectiveSpecification &spec,
-      const omp::LoopSequence &nest);
-  void CheckNestedConstruct(const parser::OpenMPLoopConstruct &x);
   void CheckTargetNest(const parser::OpenMPConstruct &x);
   void CheckTargetUpdate();
   void CheckTaskgraph(const parser::OmpBlockConstruct &x);
@@ -346,7 +350,6 @@ class OmpStructureChecker : public OmpStructureCheckerBase {
       const std::optional<parser::OmpClauseList> &maybeClauses);
   void CheckCancellationNest(
       const parser::CharBlock &source, llvm::omp::Directive type);
-  std::int64_t GetOrdCollapseLevel(const parser::OpenMPLoopConstruct &x);
   void CheckReductionObjects(
       const parser::OmpObjectList &objects, llvm::omp::Clause clauseId);
   bool CheckReductionOperator(const parser::OmpReductionIdentifier &ident,
@@ -373,20 +376,14 @@ class OmpStructureChecker : public OmpStructureCheckerBase {
   const parser::Name *GetObjectName(const parser::OmpObject &object);
   void CheckInitOnDepobj(const parser::OpenMPDepobjConstruct &depobj,
       const parser::OmpClause &initClause);
-
   void CheckAllowedRequiresClause(llvmOmpClause clause);
-  bool deviceConstructFound_{false};
-
   void AddEndDirectiveClauses(const parser::OmpClauseList &clauses);
 
   void EnterDirectiveNest(const int index) { directiveNest_[index]++; }
   void ExitDirectiveNest(const int index) { directiveNest_[index]--; }
   int GetDirectiveNest(const int index) { return directiveNest_[index]; }
-  inline void ErrIfAllocatableVariable(const parser::Variable &);
-  inline void ErrIfLHSAndRHSSymbolsMatch(
-      const parser::Variable &, const parser::Expr &);
-  inline void ErrIfNonScalarAssignmentStmt(
-      const parser::Variable &, const parser::Expr &);
+
+  bool deviceConstructFound_{false};
   enum directiveNestType : int {
     SIMDNest,
     TargetBlockOnlyTeams,
@@ -398,7 +395,7 @@ class OmpStructureChecker : public OmpStructureCheckerBase {
   };
   int directiveNest_[LastType + 1] = {0};
 
-  int allocateDirectiveLevel{0};
+  int allocateDirectiveLevel_{0};
   parser::CharBlock visitedAtomicSource_;
   SymbolSourceMap deferredNonVariables_;
 


        


More information about the flang-commits mailing list