From d35ad58859c97521edab7b2eddfa9fe6838b9a5e Mon Sep 17 00:00:00 2001 From: Timm Baeder Date: Fri, 9 May 2025 09:03:20 +0200 Subject: [clang][ExprConst] Check for array size of initlists (#138673) Fixes #138653 --- clang/lib/AST/ExprConstant.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'clang/lib') 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() -- cgit v1.1