From 110eaf156121760073fe6af6b3b0ed09be0cc0ce Mon Sep 17 00:00:00 2001 From: Zhongxing Xu Date: Fri, 26 Nov 2010 09:14:07 +0000 Subject: [PATCH] Do not use StripCasts() in this context. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@120178 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Checker/ArrayBoundChecker.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/Checker/ArrayBoundChecker.cpp b/lib/Checker/ArrayBoundChecker.cpp index cf2a2fcf62..dccb9a2952 100644 --- a/lib/Checker/ArrayBoundChecker.cpp +++ b/lib/Checker/ArrayBoundChecker.cpp @@ -44,8 +44,6 @@ void ArrayBoundChecker::VisitLocation(CheckerContext &C, const Stmt *S, SVal l){ if (!R) return; - R = R->StripCasts(); - const ElementRegion *ER = dyn_cast(R); if (!ER) return; @@ -53,6 +51,11 @@ void ArrayBoundChecker::VisitLocation(CheckerContext &C, const Stmt *S, SVal l){ // Get the index of the accessed element. DefinedOrUnknownSVal Idx = cast(ER->getIndex()); + // Zero index is always in bound, this also passes ElementRegions created for + // pointer casts. + if (Idx.isZeroConstant()) + return; + const GRState *state = C.getState(); // Get the size of the array. -- 2.40.0