[clang] cc28158 - Revert "[clang][ExprConst] Check for array size of initlists (#138673)"

Timm Bäder via cfe-commits cfe-commits at lists.llvm.org
Fri May 9 00:29:27 PDT 2025


Author: Timm Bäder
Date: 2025-05-09T09:28:26+02:00
New Revision: cc281584a11af258107b5ea702a8837da8c465fd

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

LOG: Revert "[clang][ExprConst] Check for array size of initlists (#138673)"

This reverts commit d35ad58859c97521edab7b2eddfa9fe6838b9a5e.

This breaks the clang build:
https://lab.llvm.org/buildbot/#/builders/132/builds/1033

/home/buildbot-worker/bbroot/clang-riscv-rva23-evl-vec-2stage/stage2/lib/Target/RISCV/RISCVGenGlobalISel.inc:1512:44: note: cannot allocate array; evaluated array bound 2431270 exceeds the limit (1048576); use '-fconstexpr-steps' to increase this limit

Added: 
    

Modified: 
    clang/lib/AST/ExprConstant.cpp
    clang/test/SemaCXX/constant-expression-cxx2a.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index 13eeffca04411..500d43accb082 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -11788,11 +11788,6 @@ bool ArrayExprEvaluator::VisitCXXParenListOrInitListExpr(
   LLVM_DEBUG(llvm::dbgs() << "The number of elements to initialize: "
                           << NumEltsToInit << ".\n");
 
-  if (!Info.CheckArraySize(ExprToVisit->getExprLoc(),
-                           CAT->getNumAddressingBits(Info.Ctx), NumEltsToInit,
-                           /*Diag=*/true))
-    return false;
-
   Result = APValue(APValue::UninitArray(), NumEltsToInit, NumElts);
 
   // If the array was previously zero-initialized, preserve the
@@ -11924,9 +11919,6 @@ bool ArrayExprEvaluator::VisitCXXConstructExpr(const CXXConstructExpr *E,
   if (const ConstantArrayType *CAT = Info.Ctx.getAsConstantArrayType(Type)) {
     unsigned FinalSize = CAT->getZExtSize();
 
-    if (!CheckArraySize(Info, CAT, E->getExprLoc()))
-      return false;
-
     // Preserve the array filler if we had prior zero-initialization.
     APValue Filler =
       HadZeroInit && Value->hasArrayFiller() ? Value->getArrayFiller()

diff  --git a/clang/test/SemaCXX/constant-expression-cxx2a.cpp b/clang/test/SemaCXX/constant-expression-cxx2a.cpp
index 3b58ebc6aaa1e..85720606fe9de 100644
--- a/clang/test/SemaCXX/constant-expression-cxx2a.cpp
+++ b/clang/test/SemaCXX/constant-expression-cxx2a.cpp
@@ -1497,45 +1497,3 @@ namespace GH67317 {
                               // expected-note {{subobject of type 'const unsigned char' is not initialized}}
     __builtin_bit_cast(unsigned char, *new char[3][1]);
 };
-
-namespace GH138653 {
-  constexpr unsigned kNumberOfIterations = 2000000;
-  constexpr unsigned kThreadsNumber = 2 * 8 * 1024;
-
-  /// Large array initialized by Paren/InitListExpr.
-  template <typename T, unsigned long S>
-  struct array1 {
-    using AT = T[S];
-    AT Data{};
-    constexpr array1() : Data(T()) {} // expected-note {{cannot allocate array}}
-  };
-
-  /// And initialized by a CXXConstructExpr.
-  template <typename T, unsigned long S>
-  struct array2 {
-    using AT = T[S];
-    AT Data;
-    constexpr array2() {} // expected-note {{cannot allocate array}}
-  };
-
-  template <typename T>
-  class A{};
-  int main() {
-      array1<A<short*>, kThreadsNumber * kNumberOfIterations> futures1{};
-      array2<A<short*>, kThreadsNumber * kNumberOfIterations> futures2{};
-  }
-
-  constexpr int CE1() {
-    array1<A<short*>, kThreadsNumber * kNumberOfIterations> futures1{}; // expected-note {{in call to}}
-    return 1;
-  }
-  static_assert(CE1() == 1); // expected-error {{not an integral constant expression}} \
-                             // expected-note {{in call to}}
-
-  constexpr int CE2() {
-    array2<A<short*>, kThreadsNumber * kNumberOfIterations> futures2{}; // expected-note {{in call to}}
-    return 1;
-  }
-  static_assert(CE2() == 1); // expected-error {{not an integral constant expression}} \
-                             // expected-note {{in call to}}
-}


        


More information about the cfe-commits mailing list