diff options
Diffstat (limited to 'lib/Checker/ArrayBoundChecker.cpp')
-rw-r--r-- | lib/Checker/ArrayBoundChecker.cpp | 7 |
1 files 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<ElementRegion>(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<DefinedOrUnknownSVal>(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. |