]> granicus.if.org Git - clang/commitdiff
Should not use StripCasts() in this context.
authorZhongxing Xu <xuzhongxing@gmail.com>
Fri, 26 Nov 2010 09:07:38 +0000 (09:07 +0000)
committerZhongxing Xu <xuzhongxing@gmail.com>
Fri, 26 Nov 2010 09:07:38 +0000 (09:07 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@120177 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Checker/ReturnPointerRangeChecker.cpp

index 0e7a5cf9d171082ec94ee1374d536b7f6f597667..f743eeb6eb2defd5d737dd6652a36d62c0085ff7 100644 (file)
@@ -48,19 +48,16 @@ void ReturnPointerRangeChecker::PreVisitReturnStmt(CheckerContext &C,
  
   SVal V = state->getSVal(RetE);
   const MemRegion *R = V.getAsRegion();
-  if (!R)
-    return;
-
-  R = R->StripCasts();
-  if (!R)
-    return;
 
   const ElementRegion *ER = dyn_cast_or_null<ElementRegion>(R);
   if (!ER)
     return;
 
   DefinedOrUnknownSVal Idx = cast<DefinedOrUnknownSVal>(ER->getIndex());
-
+  // Zero index is always in bound, this also passes ElementRegions created for
+  // pointer casts.
+  if (Idx.isZeroConstant())
+    return;
   // FIXME: All of this out-of-bounds checking should eventually be refactored
   // into a common place.