From: Zhongxing Xu Date: Fri, 26 Nov 2010 09:14:07 +0000 (+0000) Subject: Do not use StripCasts() in this context. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=110eaf156121760073fe6af6b3b0ed09be0cc0ce;p=clang Do not use StripCasts() in this context. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@120178 91177308-0d34-0410-b5e6-96231b3b80d8 --- 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.