llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Rahul Joshi (jurahul)

<details>
<summary>Changes</summary>

Adopt non-templated and array-ref returning forms of `getTrailingObjects` in 
DeclOpenACC and StmtOpenACC. Also use std::uninitialized_contruct_n to make the 
code a little concise.

---

Patch is 22.01 KiB, truncated to 20.00 KiB below, full version: 
https://github.com/llvm/llvm-project/pull/140087.diff


4 Files Affected:

- (modified) clang/include/clang/AST/DeclOpenACC.h (+8-14) 
- (modified) clang/include/clang/AST/StmtOpenACC.h (+54-102) 
- (modified) clang/lib/AST/StmtOpenACC.cpp (+4-7) 
- (modified) clang/lib/Serialization/ASTReaderStmt.cpp (+1-1) 


``````````diff
diff --git a/clang/include/clang/AST/DeclOpenACC.h 
b/clang/include/clang/AST/DeclOpenACC.h
index e5d1ec317fb18..c9c69ee5f64a3 100644
--- a/clang/include/clang/AST/DeclOpenACC.h
+++ b/clang/include/clang/AST/DeclOpenACC.h
@@ -73,10 +73,8 @@ class OpenACCDeclareDecl final
 
   OpenACCDeclareDecl(unsigned NumClauses)
       : OpenACCConstructDecl(OpenACCDeclare) {
-    std::uninitialized_value_construct(
-        getTrailingObjects<const OpenACCClause *>(),
-        getTrailingObjects<const OpenACCClause *>() + NumClauses);
-    setClauseList(getTrailingObjects<const OpenACCClause *>(NumClauses));
+    std::uninitialized_value_construct_n(getTrailingObjects(), NumClauses);
+    setClauseList(getTrailingObjects(NumClauses));
   }
 
   OpenACCDeclareDecl(DeclContext *DC, SourceLocation StartLoc,
@@ -85,10 +83,9 @@ class OpenACCDeclareDecl final
       : OpenACCConstructDecl(OpenACCDeclare, DC, OpenACCDirectiveKind::Declare,
                              StartLoc, DirLoc, EndLoc) {
     // Initialize the trailing storage.
-    llvm::uninitialized_copy(Clauses,
-                             getTrailingObjects<const OpenACCClause *>());
+    llvm::uninitialized_copy(Clauses, getTrailingObjects());
 
-    setClauseList(getTrailingObjects<const OpenACCClause *>(Clauses.size()));
+    setClauseList(getTrailingObjects(Clauses.size()));
   }
 
 public:
@@ -117,10 +114,8 @@ class OpenACCRoutineDecl final
 
   OpenACCRoutineDecl(unsigned NumClauses)
       : OpenACCConstructDecl(OpenACCRoutine) {
-    std::uninitialized_value_construct(
-        getTrailingObjects<const OpenACCClause *>(),
-        getTrailingObjects<const OpenACCClause *>() + NumClauses);
-    setClauseList(getTrailingObjects<const OpenACCClause *>(NumClauses));
+    std::uninitialized_value_construct_n(getTrailingObjects(), NumClauses);
+    setClauseList(getTrailingObjects(NumClauses));
   }
 
   OpenACCRoutineDecl(DeclContext *DC, SourceLocation StartLoc,
@@ -134,9 +129,8 @@ class OpenACCRoutineDecl final
     assert(LParenLoc.isValid() &&
            "Cannot represent implicit name with this declaration");
     // Initialize the trailing storage.
-    llvm::uninitialized_copy(Clauses,
-                             getTrailingObjects<const OpenACCClause *>());
-    setClauseList(getTrailingObjects<const OpenACCClause *>(Clauses.size()));
+    llvm::uninitialized_copy(Clauses, getTrailingObjects());
+    setClauseList(getTrailingObjects(Clauses.size()));
   }
 
 public:
diff --git a/clang/include/clang/AST/StmtOpenACC.h 
b/clang/include/clang/AST/StmtOpenACC.h
index bf667d4194298..c8f8b968b1c80 100644
--- a/clang/include/clang/AST/StmtOpenACC.h
+++ b/clang/include/clang/AST/StmtOpenACC.h
@@ -142,10 +142,8 @@ class OpenACCComputeConstruct final
     // We cannot send the TrailingObjects storage to the base class (which 
holds
     // a reference to the data) until it is constructed, so we have to set it
     // separately here.
-    std::uninitialized_value_construct(
-        getTrailingObjects<const OpenACCClause *>(),
-        getTrailingObjects<const OpenACCClause *>() + NumClauses);
-    setClauseList(getTrailingObjects<const OpenACCClause *>(NumClauses));
+    std::uninitialized_value_construct_n(getTrailingObjects(), NumClauses);
+    setClauseList(getTrailingObjects(NumClauses));
   }
 
   OpenACCComputeConstruct(OpenACCDirectiveKind K, SourceLocation Start,
@@ -159,10 +157,9 @@ class OpenACCComputeConstruct final
            "represented by this type");
 
     // Initialize the trailing storage.
-    llvm::uninitialized_copy(Clauses,
-                             getTrailingObjects<const OpenACCClause *>());
+    llvm::uninitialized_copy(Clauses, getTrailingObjects());
 
-    setClauseList(getTrailingObjects<const OpenACCClause *>(Clauses.size()));
+    setClauseList(getTrailingObjects(Clauses.size()));
   }
 
   void setStructuredBlock(Stmt *S) { setAssociatedStmt(S); }
@@ -254,10 +251,8 @@ class OpenACCCombinedConstruct final
             OpenACCCombinedConstructClass, OpenACCDirectiveKind::Invalid,
             SourceLocation{}, SourceLocation{}, SourceLocation{},
             /*AssociatedStmt=*/nullptr) {
-    std::uninitialized_value_construct(
-        getTrailingObjects<const OpenACCClause *>(),
-        getTrailingObjects<const OpenACCClause *>() + NumClauses);
-    setClauseList(getTrailingObjects<const OpenACCClause *>(NumClauses));
+    std::uninitialized_value_construct_n(getTrailingObjects(), NumClauses);
+    setClauseList(getTrailingObjects(NumClauses));
   }
 
   OpenACCCombinedConstruct(OpenACCDirectiveKind K, SourceLocation Start,
@@ -270,9 +265,8 @@ class OpenACCCombinedConstruct final
            "Only parallel loop, serial loop, and kernels loop constructs "
            "should be represented by this type");
 
-    llvm::uninitialized_copy(Clauses,
-                             getTrailingObjects<const OpenACCClause *>());
-    setClauseList(getTrailingObjects<const OpenACCClause *>(Clauses.size()));
+    llvm::uninitialized_copy(Clauses, getTrailingObjects());
+    setClauseList(getTrailingObjects(Clauses.size()));
   }
   void setStructuredBlock(Stmt *S) { setAssociatedStmt(S); }
 
@@ -305,10 +299,8 @@ class OpenACCDataConstruct final
             OpenACCDataConstructClass, OpenACCDirectiveKind::Data,
             SourceLocation{}, SourceLocation{}, SourceLocation{},
             /*AssociatedStmt=*/nullptr) {
-    std::uninitialized_value_construct(
-        getTrailingObjects<const OpenACCClause *>(),
-        getTrailingObjects<const OpenACCClause *>() + NumClauses);
-    setClauseList(getTrailingObjects<const OpenACCClause *>(NumClauses));
+    std::uninitialized_value_construct_n(getTrailingObjects(), NumClauses);
+    setClauseList(getTrailingObjects(NumClauses));
   }
 
   OpenACCDataConstruct(SourceLocation Start, SourceLocation DirectiveLoc,
@@ -318,9 +310,8 @@ class OpenACCDataConstruct final
       : OpenACCAssociatedStmtConstruct(OpenACCDataConstructClass,
                                        OpenACCDirectiveKind::Data, Start,
                                        DirectiveLoc, End, StructuredBlock) {
-    llvm::uninitialized_copy(Clauses,
-                             getTrailingObjects<const OpenACCClause *>());
-    setClauseList(getTrailingObjects<const OpenACCClause *>(Clauses.size()));
+    llvm::uninitialized_copy(Clauses, getTrailingObjects());
+    setClauseList(getTrailingObjects(Clauses.size()));
   }
   void setStructuredBlock(Stmt *S) { setAssociatedStmt(S); }
 
@@ -351,10 +342,8 @@ class OpenACCEnterDataConstruct final
       : OpenACCConstructStmt(OpenACCEnterDataConstructClass,
                              OpenACCDirectiveKind::EnterData, SourceLocation{},
                              SourceLocation{}, SourceLocation{}) {
-    std::uninitialized_value_construct(
-        getTrailingObjects<const OpenACCClause *>(),
-        getTrailingObjects<const OpenACCClause *>() + NumClauses);
-    setClauseList(getTrailingObjects<const OpenACCClause *>(NumClauses));
+    std::uninitialized_value_construct_n(getTrailingObjects(), NumClauses);
+    setClauseList(getTrailingObjects(NumClauses));
   }
   OpenACCEnterDataConstruct(SourceLocation Start, SourceLocation DirectiveLoc,
                             SourceLocation End,
@@ -362,9 +351,8 @@ class OpenACCEnterDataConstruct final
       : OpenACCConstructStmt(OpenACCEnterDataConstructClass,
                              OpenACCDirectiveKind::EnterData, Start,
                              DirectiveLoc, End) {
-    llvm::uninitialized_copy(Clauses,
-                             getTrailingObjects<const OpenACCClause *>());
-    setClauseList(getTrailingObjects<const OpenACCClause *>(Clauses.size()));
+    llvm::uninitialized_copy(Clauses, getTrailingObjects());
+    setClauseList(getTrailingObjects(Clauses.size()));
   }
 
 public:
@@ -387,10 +375,8 @@ class OpenACCExitDataConstruct final
       : OpenACCConstructStmt(OpenACCExitDataConstructClass,
                              OpenACCDirectiveKind::ExitData, SourceLocation{},
                              SourceLocation{}, SourceLocation{}) {
-    std::uninitialized_value_construct(
-        getTrailingObjects<const OpenACCClause *>(),
-        getTrailingObjects<const OpenACCClause *>() + NumClauses);
-    setClauseList(getTrailingObjects<const OpenACCClause *>(NumClauses));
+    std::uninitialized_value_construct_n(getTrailingObjects(), NumClauses);
+    setClauseList(getTrailingObjects(NumClauses));
   }
   OpenACCExitDataConstruct(SourceLocation Start, SourceLocation DirectiveLoc,
                            SourceLocation End,
@@ -398,9 +384,8 @@ class OpenACCExitDataConstruct final
       : OpenACCConstructStmt(OpenACCExitDataConstructClass,
                              OpenACCDirectiveKind::ExitData, Start,
                              DirectiveLoc, End) {
-    llvm::uninitialized_copy(Clauses,
-                             getTrailingObjects<const OpenACCClause *>());
-    setClauseList(getTrailingObjects<const OpenACCClause *>(Clauses.size()));
+    llvm::uninitialized_copy(Clauses, getTrailingObjects());
+    setClauseList(getTrailingObjects(Clauses.size()));
   }
 
 public:
@@ -425,10 +410,8 @@ class OpenACCHostDataConstruct final
             OpenACCHostDataConstructClass, OpenACCDirectiveKind::HostData,
             SourceLocation{}, SourceLocation{}, SourceLocation{},
             /*AssociatedStmt=*/nullptr) {
-    std::uninitialized_value_construct(
-        getTrailingObjects<const OpenACCClause *>(),
-        getTrailingObjects<const OpenACCClause *>() + NumClauses);
-    setClauseList(getTrailingObjects<const OpenACCClause *>(NumClauses));
+    std::uninitialized_value_construct_n(getTrailingObjects(), NumClauses);
+    setClauseList(getTrailingObjects(NumClauses));
   }
   OpenACCHostDataConstruct(SourceLocation Start, SourceLocation DirectiveLoc,
                            SourceLocation End,
@@ -437,9 +420,8 @@ class OpenACCHostDataConstruct final
       : OpenACCAssociatedStmtConstruct(OpenACCHostDataConstructClass,
                                        OpenACCDirectiveKind::HostData, Start,
                                        DirectiveLoc, End, StructuredBlock) {
-    llvm::uninitialized_copy(Clauses,
-                             getTrailingObjects<const OpenACCClause *>());
-    setClauseList(getTrailingObjects<const OpenACCClause *>(Clauses.size()));
+    llvm::uninitialized_copy(Clauses, getTrailingObjects());
+    setClauseList(getTrailingObjects(Clauses.size()));
   }
   void setStructuredBlock(Stmt *S) { setAssociatedStmt(S); }
 
@@ -490,11 +472,9 @@ class OpenACCWaitConstruct final
     assert(NumExprs >= 1 &&
            "NumExprs should always be >= 1 because the 'devnum' "
            "expr is represented by a null if necessary");
-    std::uninitialized_value_construct(getExprPtr(),
-                                       getExprPtr() + NumExprs);
-    std::uninitialized_value_construct(getTrailingObjects<OpenACCClause *>(),
-                                       getTrailingObjects<OpenACCClause *>() +
-                                           NumClauses);
+    std::uninitialized_value_construct_n(getExprPtr(), NumExprs);
+    std::uninitialized_value_construct_n(getTrailingObjects<OpenACCClause *>(),
+                                         NumClauses);
     setClauseList(MutableArrayRef(const_cast<const OpenACCClause **>(
                                       getTrailingObjects<OpenACCClause *>()),
                                   NumClauses));
@@ -533,13 +513,9 @@ class OpenACCWaitConstruct final
     return const_cast<Expr**>(getTrailingObjects<Expr *>());
   }
 
-  llvm::ArrayRef<Expr *> getExprs() const {
-    return llvm::ArrayRef<Expr *>(getExprPtr(), NumExprs);
-  }
+  ArrayRef<Expr *> getExprs() const { return {getExprPtr(), NumExprs}; }
 
-  llvm::ArrayRef<Expr *> getExprs() {
-    return llvm::ArrayRef<Expr *>(getExprPtr(), NumExprs);
-  }
+  ArrayRef<Expr *> getExprs() { return {getExprPtr(), NumExprs}; }
 
 public:
   static bool classof(const Stmt *T) {
@@ -597,8 +573,7 @@ class OpenACCCacheConstruct final
                              OpenACCDirectiveKind::Cache, SourceLocation{},
                              SourceLocation{}, SourceLocation{}),
         NumVars(NumVars) {
-    std::uninitialized_value_construct(getVarListPtr(),
-                                       getVarListPtr() + NumVars);
+    std::uninitialized_value_construct_n(getTrailingObjects(), NumVars);
   }
   OpenACCCacheConstruct(SourceLocation Start, SourceLocation DirectiveLoc,
                         SourceLocation LParenLoc, SourceLocation ReadOnlyLoc,
@@ -610,21 +585,13 @@ class OpenACCCacheConstruct final
         ParensLoc(LParenLoc, RParenLoc), ReadOnlyLoc(ReadOnlyLoc),
         NumVars(VarList.size()) {
 
-    llvm::uninitialized_copy(VarList, getVarListPtr());
-  }
-
-  Expr **getVarListPtr() const {
-    return const_cast<Expr **>(getTrailingObjects<Expr *>());
+    llvm::uninitialized_copy(VarList, getTrailingObjects());
   }
 
 public:
-  llvm::ArrayRef<Expr *> getVarList() const {
-    return llvm::ArrayRef<Expr *>(getVarListPtr(), NumVars);
-  }
+  ArrayRef<Expr *> getVarList() const { return getTrailingObjects(NumVars); }
 
-  llvm::ArrayRef<Expr *> getVarList() {
-    return llvm::ArrayRef<Expr *>(getVarListPtr(), NumVars);
-  }
+  MutableArrayRef<Expr *> getVarList() { return getTrailingObjects(NumVars); }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == OpenACCCacheConstructClass;
@@ -644,12 +611,12 @@ class OpenACCCacheConstruct final
   SourceLocation getReadOnlyLoc() const { return ReadOnlyLoc; }
 
   child_range children() {
-    Stmt **Begin = reinterpret_cast<Stmt **>(getVarListPtr());
+    Stmt **Begin = reinterpret_cast<Stmt **>(getTrailingObjects());
     return child_range(Begin, Begin + NumVars);
   }
 
   const_child_range children() const {
-    Stmt *const *Begin = reinterpret_cast<Stmt *const *>(getVarListPtr());
+    Stmt *const *Begin = reinterpret_cast<Stmt *const *>(getTrailingObjects());
     return const_child_range(Begin, Begin + NumVars);
   }
 };
@@ -664,10 +631,8 @@ class OpenACCInitConstruct final
       : OpenACCConstructStmt(OpenACCInitConstructClass,
                              OpenACCDirectiveKind::Init, SourceLocation{},
                              SourceLocation{}, SourceLocation{}) {
-    std::uninitialized_value_construct(
-        getTrailingObjects<const OpenACCClause *>(),
-        getTrailingObjects<const OpenACCClause *>() + NumClauses);
-    setClauseList(getTrailingObjects<const OpenACCClause *>(NumClauses));
+    std::uninitialized_value_construct_n(getTrailingObjects(), NumClauses);
+    setClauseList(getTrailingObjects(NumClauses));
   }
   OpenACCInitConstruct(SourceLocation Start, SourceLocation DirectiveLoc,
                        SourceLocation End,
@@ -675,9 +640,8 @@ class OpenACCInitConstruct final
       : OpenACCConstructStmt(OpenACCInitConstructClass,
                              OpenACCDirectiveKind::Init, Start, DirectiveLoc,
                              End) {
-    llvm::uninitialized_copy(Clauses,
-                             getTrailingObjects<const OpenACCClause *>());
-    setClauseList(getTrailingObjects<const OpenACCClause *>(Clauses.size()));
+    llvm::uninitialized_copy(Clauses, getTrailingObjects());
+    setClauseList(getTrailingObjects(Clauses.size()));
   }
 
 public:
@@ -702,10 +666,8 @@ class OpenACCShutdownConstruct final
       : OpenACCConstructStmt(OpenACCShutdownConstructClass,
                              OpenACCDirectiveKind::Shutdown, SourceLocation{},
                              SourceLocation{}, SourceLocation{}) {
-    std::uninitialized_value_construct(
-        getTrailingObjects<const OpenACCClause *>(),
-        getTrailingObjects<const OpenACCClause *>() + NumClauses);
-    setClauseList(getTrailingObjects<const OpenACCClause *>(NumClauses));
+    std::uninitialized_value_construct_n(getTrailingObjects(), NumClauses);
+    setClauseList(getTrailingObjects(NumClauses));
   }
   OpenACCShutdownConstruct(SourceLocation Start, SourceLocation DirectiveLoc,
                            SourceLocation End,
@@ -713,9 +675,8 @@ class OpenACCShutdownConstruct final
       : OpenACCConstructStmt(OpenACCShutdownConstructClass,
                              OpenACCDirectiveKind::Shutdown, Start,
                              DirectiveLoc, End) {
-    llvm::uninitialized_copy(Clauses,
-                             getTrailingObjects<const OpenACCClause *>());
-    setClauseList(getTrailingObjects<const OpenACCClause *>(Clauses.size()));
+    llvm::uninitialized_copy(Clauses, getTrailingObjects());
+    setClauseList(getTrailingObjects(Clauses.size()));
   }
 
 public:
@@ -739,10 +700,8 @@ class OpenACCSetConstruct final
       : OpenACCConstructStmt(OpenACCSetConstructClass,
                              OpenACCDirectiveKind::Set, SourceLocation{},
                              SourceLocation{}, SourceLocation{}) {
-    std::uninitialized_value_construct(
-        getTrailingObjects<const OpenACCClause *>(),
-        getTrailingObjects<const OpenACCClause *>() + NumClauses);
-    setClauseList(getTrailingObjects<const OpenACCClause *>(NumClauses));
+    std::uninitialized_value_construct_n(getTrailingObjects(), NumClauses);
+    setClauseList(getTrailingObjects(NumClauses));
   }
 
   OpenACCSetConstruct(SourceLocation Start, SourceLocation DirectiveLoc,
@@ -751,9 +710,8 @@ class OpenACCSetConstruct final
       : OpenACCConstructStmt(OpenACCSetConstructClass,
                              OpenACCDirectiveKind::Set, Start, DirectiveLoc,
                              End) {
-    llvm::uninitialized_copy(Clauses,
-                             getTrailingObjects<const OpenACCClause *>());
-    setClauseList(getTrailingObjects<const OpenACCClause *>(Clauses.size()));
+    llvm::uninitialized_copy(Clauses, getTrailingObjects());
+    setClauseList(getTrailingObjects(Clauses.size()));
   }
 
 public:
@@ -777,9 +735,7 @@ class OpenACCUpdateConstruct final
       : OpenACCConstructStmt(OpenACCUpdateConstructClass,
                              OpenACCDirectiveKind::Update, SourceLocation{},
                              SourceLocation{}, SourceLocation{}) {
-    std::uninitialized_value_construct(
-        getTrailingObjects<const OpenACCClause *>(),
-        getTrailingObjects<const OpenACCClause *>() + NumClauses);
+    std::uninitialized_value_construct_n(getTrailingObjects(), NumClauses);
     setClauseList(getTrailingObjects<const OpenACCClause *>(NumClauses));
   }
 
@@ -789,9 +745,8 @@ class OpenACCUpdateConstruct final
       : OpenACCConstructStmt(OpenACCUpdateConstructClass,
                              OpenACCDirectiveKind::Update, Start, DirectiveLoc,
                              End) {
-    llvm::uninitialized_copy(Clauses,
-                             getTrailingObjects<const OpenACCClause *>());
-    setClauseList(getTrailingObjects<const OpenACCClause *>(Clauses.size()));
+    llvm::uninitialized_copy(Clauses, getTrailingObjects());
+    setClauseList(getTrailingObjects(Clauses.size()));
   }
 
 public:
@@ -821,10 +776,8 @@ class OpenACCAtomicConstruct final
             OpenACCAtomicConstructClass, OpenACCDirectiveKind::Atomic,
             SourceLocation{}, SourceLocation{}, SourceLocation{},
             /*AssociatedStmt=*/nullptr) {
-    std::uninitialized_value_construct(
-        getTrailingObjects<const OpenACCClause *>(),
-        getTrailingObjects<const OpenACCClause *>() + NumClauses);
-    setClauseList(getTrailingObjects<const OpenACCClause *>(NumClauses));
+    std::uninitialized_value_construct_n(getTrailingObjects(), NumClauses);
+    setClauseList(getTrailingObjects(NumClauses));
   }
 
   OpenACCAtomicConstruct(SourceLocation Start, SourceLocation DirectiveLoc,
@@ -836,10 +789,9 @@ class OpenACCAtomicConstruct final
                                        DirectiveLoc, End, AssociatedStmt),
         AtomicKind(AtKind) {
     // Initialize the trailing storage.
-    llvm::uninitialized_copy(Clauses,
-                             getTrailingObjects<const OpenACCClause *>());
+    llvm::uninitialized_copy(Clauses, getTrailingObjects());
 
-    setClauseList(getTrailingObjects<const OpenACCClause *>(Clauses.size()));
+    setClauseList(getTrailingObjects(Clauses.size()));
   }
 
   void setAssociatedStmt(Stmt *S) {
diff --git a/clang/lib/AST/StmtOpenACC.cpp b/clang/lib/AST/StmtOpenACC.cpp
i...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/140087
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to