summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorge Karpenkov <ekarpenkov@apple.com>2018-02-26 21:32:57 +0000
committerGeorge Karpenkov <ekarpenkov@apple.com>2018-02-26 21:32:57 +0000
commit5d3b0e38d649f0843970a689c735c803a6e98d0f (patch)
tree77faa623046a6a0b7407a1f75c1bd14cc9f16d5f
parent00cc735a6f443cec8d9fcd3d64ae8d10a7caaae0 (diff)
downloadbcm5719-llvm-5d3b0e38d649f0843970a689c735c803a6e98d0f.tar.gz
bcm5719-llvm-5d3b0e38d649f0843970a689c735c803a6e98d0f.zip
Revert "[analyzer] Quickfix: do not overflow in calculating offset in RegionManager"
This reverts commit df306c4c5ab4a6b8d3c47432346d1f9b90c328b4. Reverting until I can figured out the reasons for failures. llvm-svn: 326131
-rw-r--r--clang/lib/StaticAnalyzer/Core/MemRegion.cpp46
-rw-r--r--clang/test/Analysis/region-store.cpp2
-rw-r--r--clang/test/Analysis/region_store_overflow.c13
3 files changed, 1 insertions, 60 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/MemRegion.cpp b/clang/lib/StaticAnalyzer/Core/MemRegion.cpp
index 2f77524f68a..aa54544fa7d 100644
--- a/clang/lib/StaticAnalyzer/Core/MemRegion.cpp
+++ b/clang/lib/StaticAnalyzer/Core/MemRegion.cpp
@@ -23,11 +23,6 @@
#include "clang/Basic/SourceManager.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h"
#include "llvm/Support/raw_ostream.h"
-#include "llvm/Support/Debug.h"
-
-#include<functional>
-
-#define DEBUG_TYPE "MemRegion"
using namespace clang;
using namespace ento;
@@ -1154,36 +1149,6 @@ const SymbolicRegion *MemRegion::getSymbolicBase() const {
return nullptr;
}
-/// Perform a given operation on two integers, return whether it overflows.
-/// Optionally write the resulting output into \p Res.
-static bool checkedOp(
- int64_t LHS,
- int64_t RHS,
- std::function<llvm::APInt(llvm::APInt *, const llvm::APInt &, bool &)> Op,
- int64_t *Res = nullptr) {
- llvm::APInt ALHS(/*BitSize=*/64, LHS, /*Signed=*/true);
- llvm::APInt ARHS(/*BitSize=*/64, RHS, /*Signed=*/true);
- bool Overflow;
- llvm::APInt Out = Op(&ALHS, ARHS, Overflow);
- if (!Overflow && Res)
- *Res = Out.getSExtValue();
- return Overflow;
-}
-
-static bool checkedAdd(
- int64_t LHS,
- int64_t RHS,
- int64_t *Res=nullptr) {
- return checkedOp(LHS, RHS, &llvm::APInt::sadd_ov, Res);
-}
-
-static bool checkedMul(
- int64_t LHS,
- int64_t RHS,
- int64_t *Res=nullptr) {
- return checkedOp(LHS, RHS, &llvm::APInt::smul_ov, Res);
-}
-
RegionRawOffset ElementRegion::getAsArrayOffset() const {
CharUnits offset = CharUnits::Zero();
const ElementRegion *ER = this;
@@ -1211,17 +1176,6 @@ RegionRawOffset ElementRegion::getAsArrayOffset() const {
}
CharUnits size = C.getTypeSizeInChars(elemType);
-
- int64_t Mult;
- bool Overflow = checkedAdd(i, size.getQuantity(), &Mult);
- Overflow |= checkedMul(Mult, offset.getQuantity());
- if (Overflow) {
- DEBUG(llvm::dbgs() << "MemRegion::getAsArrayOffset: "
- << "offset overflowing, returning unknown\n");
-
- return nullptr;
- }
-
offset += (i * size);
}
diff --git a/clang/test/Analysis/region-store.cpp b/clang/test/Analysis/region-store.cpp
index ab179ceb1ac..cb49f4837d8 100644
--- a/clang/test/Analysis/region-store.cpp
+++ b/clang/test/Analysis/region-store.cpp
@@ -25,4 +25,4 @@ int radar13445834(Derived *Builder, Loc l) {
Builder->setLoc(l);
return Builder->accessBase();
-}
+} \ No newline at end of file
diff --git a/clang/test/Analysis/region_store_overflow.c b/clang/test/Analysis/region_store_overflow.c
deleted file mode 100644
index 81acd41bb6a..00000000000
--- a/clang/test/Analysis/region_store_overflow.c
+++ /dev/null
@@ -1,13 +0,0 @@
-// REQUIRES: asserts
-// RUN: %clang_analyze_cc1 -analyze -analyzer-checker=core -mllvm -debug %s 2>&1 | FileCheck %s
-
-int **h;
-int overflow_in_memregion(long j) {
- for (int l = 0;; ++l) {
- if (j - l > 0)
- return h[j - l][0]; // no-crash
- }
- return 0;
-}
-// CHECK: {{.*}}
-// CHECK: MemRegion::getAsArrayOffset: offset overflowing, returning unknown
OpenPOWER on IntegriCloud