Skip to content

[NFC][Clang] Simplify getTrailingObjects for OpenACC/OpenMP Clause #139838

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 14, 2025

Conversation

jurahul
Copy link
Contributor

@jurahul jurahul commented May 14, 2025

Simplify usage of getTrailingObjects for OpenACC/OpenMP Clause by using either the non-templated form for single trailing types or using the single argument form that returns an ArrayRef/MutableArrayRef.

Simplify usage of `getTrailingObjects` for OpenACC/OpenMP Clause
by using either the non-templated form for single trailing types
or using the single argument form that returns an
ArrayRef/MutableArrayRef.
@jurahul jurahul marked this pull request as ready for review May 14, 2025 13:11
@jurahul jurahul requested a review from erichkeane May 14, 2025 13:11
@llvmbot llvmbot added clang Clang issues not falling into any other category clang:frontend Language frontend issues, e.g. anything involving "Sema" clang:openmp OpenMP related changes to Clang labels May 14, 2025
@llvmbot
Copy link
Member

llvmbot commented May 14, 2025

@llvm/pr-subscribers-clang

Author: Rahul Joshi (jurahul)

Changes

Simplify usage of getTrailingObjects for OpenACC/OpenMP Clause by using either the non-templated form for single trailing types or using the single argument form that returns an ArrayRef/MutableArrayRef.


Full diff: https://github.com/llvm/llvm-project/pull/139838.diff

3 Files Affected:

  • (modified) clang/include/clang/AST/OpenACCClause.h (+27-30)
  • (modified) clang/include/clang/AST/OpenMPClause.h (+22-39)
  • (modified) clang/lib/AST/OpenACCClause.cpp (+2-3)
diff --git a/clang/include/clang/AST/OpenACCClause.h b/clang/include/clang/AST/OpenACCClause.h
index c44e8388337c1..67fbdfeb0702f 100644
--- a/clang/include/clang/AST/OpenACCClause.h
+++ b/clang/include/clang/AST/OpenACCClause.h
@@ -293,7 +293,7 @@ class OpenACCDeviceTypeClause final
            "Only a single asterisk version is permitted, and must be the "
            "only one");
 
-    llvm::uninitialized_copy(Archs, getTrailingObjects<DeviceTypeArgument>());
+    llvm::uninitialized_copy(Archs, getTrailingObjects());
   }
 
 public:
@@ -307,8 +307,7 @@ class OpenACCDeviceTypeClause final
   }
 
   ArrayRef<DeviceTypeArgument> getArchitectures() const {
-    return ArrayRef<DeviceTypeArgument>(
-        getTrailingObjects<DeviceTypeArgument>(), NumArchs);
+    return getTrailingObjects<DeviceTypeArgument>(NumArchs);
   }
 
   static OpenACCDeviceTypeClause *
@@ -421,9 +420,7 @@ class OpenACCSelfClause final
 
   // Intentionally internal, meant to be an implementation detail of everything
   // else. All non-internal uses should go through getConditionExpr/getVarList.
-  llvm::ArrayRef<Expr *> getExprs() const {
-    return {getTrailingObjects<Expr *>(), NumExprs};
-  }
+  ArrayRef<Expr *> getExprs() const { return getTrailingObjects(NumExprs); }
 
 public:
   static bool classof(const OpenACCClause *C) {
@@ -472,8 +469,8 @@ class OpenACCSelfClause final
 
   child_range children() {
     return child_range(
-        reinterpret_cast<Stmt **>(getTrailingObjects<Expr *>()),
-        reinterpret_cast<Stmt **>(getTrailingObjects<Expr *>() + NumExprs));
+        reinterpret_cast<Stmt **>(getTrailingObjects()),
+        reinterpret_cast<Stmt **>(getTrailingObjects() + NumExprs));
   }
 
   const_child_range children() const {
@@ -546,10 +543,10 @@ class OpenACCWaitClause final
         QueuesLoc(QueuesLoc) {
     // The first element of the trailing storage is always the devnum expr,
     // whether it is used or not.
-    auto *Exprs = getTrailingObjects<Expr *>();
+    auto *Exprs = getTrailingObjects();
     llvm::uninitialized_copy(ArrayRef(DevNumExpr), Exprs);
     llvm::uninitialized_copy(QueueIdExprs, Exprs + 1);
-    setExprs(getTrailingObjects<Expr *>(QueueIdExprs.size() + 1));
+    setExprs(getTrailingObjects(QueueIdExprs.size() + 1));
   }
 
 public:
@@ -586,7 +583,7 @@ class OpenACCNumGangsClause final
                         ArrayRef<Expr *> IntExprs, SourceLocation EndLoc)
       : OpenACCClauseWithExprs(OpenACCClauseKind::NumGangs, BeginLoc, LParenLoc,
                                EndLoc) {
-    setExprs(getTrailingObjects<Expr *>(IntExprs.size()), IntExprs);
+    setExprs(getTrailingObjects(IntExprs.size()), IntExprs);
   }
 
 public:
@@ -614,7 +611,7 @@ class OpenACCTileClause final
                     ArrayRef<Expr *> SizeExprs, SourceLocation EndLoc)
       : OpenACCClauseWithExprs(OpenACCClauseKind::Tile, BeginLoc, LParenLoc,
                                EndLoc) {
-    setExprs(getTrailingObjects<Expr *>(SizeExprs.size()), SizeExprs);
+    setExprs(getTrailingObjects(SizeExprs.size()), SizeExprs);
   }
 
 public:
@@ -851,7 +848,7 @@ class OpenACCPrivateClause final
                        ArrayRef<Expr *> VarList, SourceLocation EndLoc)
       : OpenACCClauseWithVarList(OpenACCClauseKind::Private, BeginLoc,
                                  LParenLoc, EndLoc) {
-    setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
+    setExprs(getTrailingObjects(VarList.size()), VarList);
   }
 
 public:
@@ -872,7 +869,7 @@ class OpenACCFirstPrivateClause final
                             ArrayRef<Expr *> VarList, SourceLocation EndLoc)
       : OpenACCClauseWithVarList(OpenACCClauseKind::FirstPrivate, BeginLoc,
                                  LParenLoc, EndLoc) {
-    setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
+    setExprs(getTrailingObjects(VarList.size()), VarList);
   }
 
 public:
@@ -893,7 +890,7 @@ class OpenACCDevicePtrClause final
                          ArrayRef<Expr *> VarList, SourceLocation EndLoc)
       : OpenACCClauseWithVarList(OpenACCClauseKind::DevicePtr, BeginLoc,
                                  LParenLoc, EndLoc) {
-    setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
+    setExprs(getTrailingObjects(VarList.size()), VarList);
   }
 
 public:
@@ -914,7 +911,7 @@ class OpenACCAttachClause final
                       ArrayRef<Expr *> VarList, SourceLocation EndLoc)
       : OpenACCClauseWithVarList(OpenACCClauseKind::Attach, BeginLoc, LParenLoc,
                                  EndLoc) {
-    setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
+    setExprs(getTrailingObjects(VarList.size()), VarList);
   }
 
 public:
@@ -935,7 +932,7 @@ class OpenACCDetachClause final
                       ArrayRef<Expr *> VarList, SourceLocation EndLoc)
       : OpenACCClauseWithVarList(OpenACCClauseKind::Detach, BeginLoc, LParenLoc,
                                  EndLoc) {
-    setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
+    setExprs(getTrailingObjects(VarList.size()), VarList);
   }
 
 public:
@@ -956,7 +953,7 @@ class OpenACCDeleteClause final
                       ArrayRef<Expr *> VarList, SourceLocation EndLoc)
       : OpenACCClauseWithVarList(OpenACCClauseKind::Delete, BeginLoc, LParenLoc,
                                  EndLoc) {
-    setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
+    setExprs(getTrailingObjects(VarList.size()), VarList);
   }
 
 public:
@@ -977,7 +974,7 @@ class OpenACCUseDeviceClause final
                          ArrayRef<Expr *> VarList, SourceLocation EndLoc)
       : OpenACCClauseWithVarList(OpenACCClauseKind::UseDevice, BeginLoc,
                                  LParenLoc, EndLoc) {
-    setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
+    setExprs(getTrailingObjects(VarList.size()), VarList);
   }
 
 public:
@@ -998,7 +995,7 @@ class OpenACCNoCreateClause final
                         ArrayRef<Expr *> VarList, SourceLocation EndLoc)
       : OpenACCClauseWithVarList(OpenACCClauseKind::NoCreate, BeginLoc,
                                  LParenLoc, EndLoc) {
-    setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
+    setExprs(getTrailingObjects(VarList.size()), VarList);
   }
 
 public:
@@ -1019,7 +1016,7 @@ class OpenACCPresentClause final
                        ArrayRef<Expr *> VarList, SourceLocation EndLoc)
       : OpenACCClauseWithVarList(OpenACCClauseKind::Present, BeginLoc,
                                  LParenLoc, EndLoc) {
-    setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
+    setExprs(getTrailingObjects(VarList.size()), VarList);
   }
 
 public:
@@ -1039,7 +1036,7 @@ class OpenACCHostClause final
                     ArrayRef<Expr *> VarList, SourceLocation EndLoc)
       : OpenACCClauseWithVarList(OpenACCClauseKind::Host, BeginLoc, LParenLoc,
                                  EndLoc) {
-    setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
+    setExprs(getTrailingObjects(VarList.size()), VarList);
   }
 
 public:
@@ -1061,7 +1058,7 @@ class OpenACCDeviceClause final
                       ArrayRef<Expr *> VarList, SourceLocation EndLoc)
       : OpenACCClauseWithVarList(OpenACCClauseKind::Device, BeginLoc, LParenLoc,
                                  EndLoc) {
-    setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
+    setExprs(getTrailingObjects(VarList.size()), VarList);
   }
 
 public:
@@ -1088,7 +1085,7 @@ class OpenACCCopyClause final
             Spelling == OpenACCClauseKind::PCopy ||
             Spelling == OpenACCClauseKind::PresentOrCopy) &&
            "Invalid clause kind for copy-clause");
-    setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
+    setExprs(getTrailingObjects(VarList.size()), VarList);
   }
 
 public:
@@ -1121,7 +1118,7 @@ class OpenACCCopyInClause final
             Spelling == OpenACCClauseKind::PCopyIn ||
             Spelling == OpenACCClauseKind::PresentOrCopyIn) &&
            "Invalid clause kind for copyin-clause");
-    setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
+    setExprs(getTrailingObjects(VarList.size()), VarList);
   }
 
 public:
@@ -1153,7 +1150,7 @@ class OpenACCCopyOutClause final
             Spelling == OpenACCClauseKind::PCopyOut ||
             Spelling == OpenACCClauseKind::PresentOrCopyOut) &&
            "Invalid clause kind for copyout-clause");
-    setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
+    setExprs(getTrailingObjects(VarList.size()), VarList);
   }
 
 public:
@@ -1185,7 +1182,7 @@ class OpenACCCreateClause final
             Spelling == OpenACCClauseKind::PCreate ||
             Spelling == OpenACCClauseKind::PresentOrCreate) &&
            "Invalid clause kind for create-clause");
-    setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
+    setExprs(getTrailingObjects(VarList.size()), VarList);
   }
 
 public:
@@ -1214,7 +1211,7 @@ class OpenACCReductionClause final
       : OpenACCClauseWithVarList(OpenACCClauseKind::Reduction, BeginLoc,
                                  LParenLoc, EndLoc),
         Op(Operator) {
-    setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
+    setExprs(getTrailingObjects(VarList.size()), VarList);
   }
 
 public:
@@ -1239,7 +1236,7 @@ class OpenACCLinkClause final
                     ArrayRef<Expr *> VarList, SourceLocation EndLoc)
       : OpenACCClauseWithVarList(OpenACCClauseKind::Link, BeginLoc, LParenLoc,
                                  EndLoc) {
-    setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
+    setExprs(getTrailingObjects(VarList.size()), VarList);
   }
 
 public:
@@ -1262,7 +1259,7 @@ class OpenACCDeviceResidentClause final
                               ArrayRef<Expr *> VarList, SourceLocation EndLoc)
       : OpenACCClauseWithVarList(OpenACCClauseKind::DeviceResident, BeginLoc,
                                  LParenLoc, EndLoc) {
-    setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
+    setExprs(getTrailingObjects(VarList.size()), VarList);
   }
 
 public:
diff --git a/clang/include/clang/AST/OpenMPClause.h b/clang/include/clang/AST/OpenMPClause.h
index cdecc812f7fb9..6fd16bc0f03be 100644
--- a/clang/include/clang/AST/OpenMPClause.h
+++ b/clang/include/clang/AST/OpenMPClause.h
@@ -295,8 +295,7 @@ template <class T> class OMPVarListClause : public OMPClause {
 
   /// Fetches list of variables associated with this clause.
   MutableArrayRef<Expr *> getVarRefs() {
-    return MutableArrayRef<Expr *>(
-        static_cast<T *>(this)->template getTrailingObjects<Expr *>(), NumVars);
+    return static_cast<T *>(this)->template getTrailingObjects<Expr *>(NumVars);
   }
 
   /// Sets the list of variables for this clause.
@@ -336,8 +335,7 @@ template <class T> class OMPVarListClause : public OMPClause {
 
   /// Fetches list of all variables in the clause.
   ArrayRef<const Expr *> getVarRefs() const {
-    return llvm::ArrayRef(
-        static_cast<const T *>(this)->template getTrailingObjects<Expr *>(),
+    return static_cast<const T *>(this)->template getTrailingObjects<Expr *>(
         NumVars);
   }
 };
@@ -382,10 +380,8 @@ template <class T> class OMPDirectiveListClause : public OMPClause {
   }
 
   MutableArrayRef<OpenMPDirectiveKind> getDirectiveKinds() {
-    return MutableArrayRef<OpenMPDirectiveKind>(
-        static_cast<T *>(this)
-            ->template getTrailingObjects<OpenMPDirectiveKind>(),
-        NumKinds);
+    return static_cast<T *>(this)
+        ->template getTrailingObjects<OpenMPDirectiveKind>(NumKinds);
   }
 
   void setDirectiveKinds(ArrayRef<OpenMPDirectiveKind> DK) {
@@ -984,14 +980,12 @@ class OMPSizesClause final
 
   /// Returns the tile size expressions.
   MutableArrayRef<Expr *> getSizesRefs() {
-    return MutableArrayRef<Expr *>(static_cast<OMPSizesClause *>(this)
-                                       ->template getTrailingObjects<Expr *>(),
-                                   NumSizes);
+    return static_cast<OMPSizesClause *>(this)
+        ->template getTrailingObjects<Expr *>(NumSizes);
   }
   ArrayRef<Expr *> getSizesRefs() const {
-    return ArrayRef<Expr *>(static_cast<const OMPSizesClause *>(this)
-                                ->template getTrailingObjects<Expr *>(),
-                            NumSizes);
+    return static_cast<const OMPSizesClause *>(this)
+        ->template getTrailingObjects<Expr *>(NumSizes);
   }
 
   /// Sets the tile size expressions.
@@ -1090,14 +1084,12 @@ class OMPPermutationClause final
   /// Returns the permutation index expressions.
   ///@{
   MutableArrayRef<Expr *> getArgsRefs() {
-    return MutableArrayRef<Expr *>(static_cast<OMPPermutationClause *>(this)
-                                       ->template getTrailingObjects<Expr *>(),
-                                   NumLoops);
+    return static_cast<OMPPermutationClause *>(this)
+        ->template getTrailingObjects<Expr *>(NumLoops);
   }
   ArrayRef<Expr *> getArgsRefs() const {
-    return ArrayRef<Expr *>(static_cast<const OMPPermutationClause *>(this)
-                                ->template getTrailingObjects<Expr *>(),
-                            NumLoops);
+    return static_cast<const OMPPermutationClause *>(this)
+        ->template getTrailingObjects<Expr *>(NumLoops);
   }
   ///@}
 
@@ -3841,7 +3833,7 @@ class OMPReductionClause final
     return MutableArrayRef<Expr *>(getLHSExprs().end(), varlist_size());
   }
   ArrayRef<const Expr *> getRHSExprs() const {
-    return llvm::ArrayRef(getLHSExprs().end(), varlist_size());
+    return ArrayRef(getLHSExprs().end(), varlist_size());
   }
 
   /// Set list of helper reduction expressions, required for proper
@@ -5925,18 +5917,15 @@ class OMPMappableExprListClause : public OMPVarListClause<T>,
   /// Get the unique declarations that are in the trailing objects of the
   /// class.
   MutableArrayRef<ValueDecl *> getUniqueDeclsRef() {
-    return MutableArrayRef<ValueDecl *>(
-        static_cast<T *>(this)->template getTrailingObjects<ValueDecl *>(),
+    return static_cast<T *>(this)->template getTrailingObjects<ValueDecl *>(
         NumUniqueDeclarations);
   }
 
   /// Get the unique declarations that are in the trailing objects of the
   /// class.
   ArrayRef<ValueDecl *> getUniqueDeclsRef() const {
-    return ArrayRef<ValueDecl *>(
-        static_cast<const T *>(this)
-            ->template getTrailingObjects<ValueDecl *>(),
-        NumUniqueDeclarations);
+    return static_cast<const T *>(this)
+        ->template getTrailingObjects<ValueDecl *>(NumUniqueDeclarations);
   }
 
   /// Set the unique declarations that are in the trailing objects of the
@@ -5950,16 +5939,14 @@ class OMPMappableExprListClause : public OMPVarListClause<T>,
   /// Get the number of lists per declaration that are in the trailing
   /// objects of the class.
   MutableArrayRef<unsigned> getDeclNumListsRef() {
-    return MutableArrayRef<unsigned>(
-        static_cast<T *>(this)->template getTrailingObjects<unsigned>(),
+    return static_cast<T *>(this)->template getTrailingObjects<unsigned>(
         NumUniqueDeclarations);
   }
 
   /// Get the number of lists per declaration that are in the trailing
   /// objects of the class.
   ArrayRef<unsigned> getDeclNumListsRef() const {
-    return ArrayRef<unsigned>(
-        static_cast<const T *>(this)->template getTrailingObjects<unsigned>(),
+    return static_cast<const T *>(this)->template getTrailingObjects<unsigned>(
         NumUniqueDeclarations);
   }
 
@@ -5999,18 +5986,14 @@ class OMPMappableExprListClause : public OMPVarListClause<T>,
 
   /// Get the components that are in the trailing objects of the class.
   MutableArrayRef<MappableComponent> getComponentsRef() {
-    return MutableArrayRef<MappableComponent>(
-        static_cast<T *>(this)
-            ->template getTrailingObjects<MappableComponent>(),
-        NumComponents);
+    return static_cast<T *>(this)
+        ->template getTrailingObjects<MappableComponent>(NumComponents);
   }
 
   /// Get the components that are in the trailing objects of the class.
   ArrayRef<MappableComponent> getComponentsRef() const {
-    return ArrayRef<MappableComponent>(
-        static_cast<const T *>(this)
-            ->template getTrailingObjects<MappableComponent>(),
-        NumComponents);
+    return static_cast<const T *>(this)
+        ->template getTrailingObjects<MappableComponent>(NumComponents);
   }
 
   /// Set the components that are in the trailing objects of the class.
diff --git a/clang/lib/AST/OpenACCClause.cpp b/clang/lib/AST/OpenACCClause.cpp
index 0c141fc908820..7283ff837b04e 100644
--- a/clang/lib/AST/OpenACCClause.cpp
+++ b/clang/lib/AST/OpenACCClause.cpp
@@ -114,7 +114,7 @@ OpenACCSelfClause::OpenACCSelfClause(SourceLocation BeginLoc,
     : OpenACCClauseWithParams(OpenACCClauseKind::Self, BeginLoc, LParenLoc,
                               EndLoc),
       HasConditionExpr(std::nullopt), NumExprs(VarList.size()) {
-  llvm::uninitialized_copy(VarList, getTrailingObjects<Expr *>());
+  llvm::uninitialized_copy(VarList, getTrailingObjects());
 }
 
 OpenACCSelfClause::OpenACCSelfClause(SourceLocation BeginLoc,
@@ -126,8 +126,7 @@ OpenACCSelfClause::OpenACCSelfClause(SourceLocation BeginLoc,
   assert((!ConditionExpr || ConditionExpr->isInstantiationDependent() ||
           ConditionExpr->getType()->isScalarType()) &&
          "Condition expression type not scalar/dependent");
-  llvm::uninitialized_copy(ArrayRef(ConditionExpr),
-                           getTrailingObjects<Expr *>());
+  llvm::uninitialized_copy(ArrayRef(ConditionExpr), getTrailingObjects());
 }
 
 OpenACCClause::child_range OpenACCClause::children() {

Copy link
Collaborator

@erichkeane erichkeane left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@alexey-bataev for visibility as he's the OMP owner.

@jurahul jurahul merged commit 26fbbfd into llvm:main May 14, 2025
17 checks passed
@jurahul jurahul deleted the clang_trailing_openacc_openmp branch May 14, 2025 16:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
clang:frontend Language frontend issues, e.g. anything involving "Sema" clang:openmp OpenMP related changes to Clang clang Clang issues not falling into any other category
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants