diff options
author | George Karpenkov <ekarpenkov@apple.com> | 2018-02-26 21:32:57 +0000 |
---|---|---|
committer | George Karpenkov <ekarpenkov@apple.com> | 2018-02-26 21:32:57 +0000 |
commit | 5d3b0e38d649f0843970a689c735c803a6e98d0f (patch) | |
tree | 77faa623046a6a0b7407a1f75c1bd14cc9f16d5f /clang/lib/StaticAnalyzer/Core/MemRegion.cpp | |
parent | 00cc735a6f443cec8d9fcd3d64ae8d10a7caaae0 (diff) | |
download | bcm5719-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
Diffstat (limited to 'clang/lib/StaticAnalyzer/Core/MemRegion.cpp')
-rw-r--r-- | clang/lib/StaticAnalyzer/Core/MemRegion.cpp | 46 |
1 files changed, 0 insertions, 46 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); } |