[clang] [NFC][Clang] Add `setExprs` overload to reduce some code duplication (PR #139749)

Erich Keane via cfe-commits cfe-commits at lists.llvm.org
Tue May 13 12:41:22 PDT 2025


================
@@ -501,20 +501,28 @@ class OpenACCClauseWithExprs : public OpenACCClauseWithParams {
 
   /// Used only for initialization, the leaf class can initialize this to
   /// trailing storage.
-  void setExprs(MutableArrayRef<Expr *> NewExprs) {
-    assert(Exprs.empty() && "Cannot change Exprs list");
-    Exprs = NewExprs;
+  void setExprs(MutableArrayRef<Expr *> NewStorage) {
+    assert(Storage.empty() && "Cannot change Exprs list");
+    Storage = NewStorage;
+  }
+
+  /// Used only for initialization, the leaf class can initialize this to
+  /// trailing storage, and initialize the data in the trailing storage as well.
+  void setExprs(MutableArrayRef<Expr *> NewStorage, ArrayRef<Expr *> Exprs) {
+    assert(NewStorage.size() == Exprs.size());
----------------
erichkeane wrote:

The reason it is `Storage` here, is because there isn't valid data in the `NewStorage` array, it is uninitialized data meant to represent the data 'location'.  It isn't `Exprs` until after the `uninitialized_copy`.



https://github.com/llvm/llvm-project/pull/139749


More information about the cfe-commits mailing list