aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-08-01 05:59:39 +0000
committerTed Kremenek <kremenek@apple.com>2009-08-01 05:59:39 +0000
commit39abcdf1c7dfc4fd2bda57416812672830400c9e (patch)
tree5800eea967c12d0cd28ed56c07745b032251935a
parentf79ad5f49198dd251501dae66fe5c594842583e8 (diff)
Temporarily disable out-of-bounds checking. The current checking logic will not work quite right with the changes I'm about to commit.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77779 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Analysis/GRExprEngine.cpp7
-rw-r--r--test/Analysis/outofbound.c1
-rw-r--r--test/Analysis/rdar-6541136-region.c7
3 files changed, 12 insertions, 3 deletions
diff --git a/lib/Analysis/GRExprEngine.cpp b/lib/Analysis/GRExprEngine.cpp
index 6431ec7ace..14333875f8 100644
--- a/lib/Analysis/GRExprEngine.cpp
+++ b/lib/Analysis/GRExprEngine.cpp
@@ -1241,6 +1241,9 @@ GRExprEngine::NodeTy* GRExprEngine::EvalLocation(Stmt* Ex, NodeTy* Pred,
if (!StNotNull)
return NULL;
+ // FIXME: Temporarily disable out-of-bounds checking until we make
+ // the logic reflect recent changes to CastRegion and friends.
+#if 0
// Check for out-of-bound array access.
if (isa<loc::MemRegionVal>(LV)) {
const MemRegion* R = cast<loc::MemRegionVal>(LV).getRegion();
@@ -1278,6 +1281,7 @@ GRExprEngine::NodeTy* GRExprEngine::EvalLocation(Stmt* Ex, NodeTy* Pred,
StNotNull = StInBound;
}
}
+#endif
// Generate a new node indicating the checks succeed.
return Builder->generateNode(Ex, StNotNull, Pred,
@@ -1316,7 +1320,8 @@ static bool EvalOSAtomicCompareAndSwap(ExplodedNodeSet<GRState>& Dst,
return false;
Expr *theValueExpr = CE->getArg(2);
- const PointerType *theValueType = theValueExpr->getType()->getAs<PointerType>();
+ const PointerType *theValueType =
+ theValueExpr->getType()->getAs<PointerType>();
// theValueType not a pointer?
if (!theValueType)
diff --git a/test/Analysis/outofbound.c b/test/Analysis/outofbound.c
index 527a311d2b..568f14329e 100644
--- a/test/Analysis/outofbound.c
+++ b/test/Analysis/outofbound.c
@@ -1,4 +1,5 @@
// RUN: clang-cc -analyze -checker-cfref -analyzer-store=region -verify %s
+// XFAIL
char f1() {
char* s = "abcd";
diff --git a/test/Analysis/rdar-6541136-region.c b/test/Analysis/rdar-6541136-region.c
index 1e7a2d974b..e2779e8d91 100644
--- a/test/Analysis/rdar-6541136-region.c
+++ b/test/Analysis/rdar-6541136-region.c
@@ -13,7 +13,10 @@ void foo( void )
struct load_wine *cmd = (void*) &wonky[1];
cmd = cmd;
char *p = (void*) &wonky[1];
- *p = 1;
+ *p = 1; // no-warning
kernel_tea_cheese_t *q = &wonky[1];
- kernel_tea_cheese_t r = *q; // expected-warning{{out-of-bound memory position}}
+ // This test case tests both the RegionStore logic (doesn't crash) and
+ // the out-of-bounds checking. We don't expect the warning for now since
+ // out-of-bound checking is temporarily disabled.
+ kernel_tea_cheese_t r = *q; // eventually-warning{{out-of-bound memory position}}
}