aboutsummaryrefslogtreecommitdiff
path: root/clang/lib
diff options
context:
space:
mode:
authorTimm Baeder <tbaeder@redhat.com>2025-05-09 09:03:20 +0200
committerGitHub <noreply@github.com>2025-05-09 09:03:20 +0200
commitd35ad58859c97521edab7b2eddfa9fe6838b9a5e (patch)
tree2bdb944c67d05563b41b4eb05deca2e846c7b9af /clang/lib
parent7439d7bdf5aa0069c91693ec590561f234d05c20 (diff)
downloadllvm-d35ad58859c97521edab7b2eddfa9fe6838b9a5e.zip
llvm-d35ad58859c97521edab7b2eddfa9fe6838b9a5e.tar.gz
llvm-d35ad58859c97521edab7b2eddfa9fe6838b9a5e.tar.bz2
[clang][ExprConst] Check for array size of initlists (#138673)
Fixes #138653
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/AST/ExprConstant.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index 500d43a..13eeffc 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -11788,6 +11788,11 @@ 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
@@ -11919,6 +11924,9 @@ 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()