diff options
| author | Zhongxing Xu <xuzhongxing@gmail.com> | 2010-08-03 06:34:25 +0000 |
|---|---|---|
| committer | Zhongxing Xu <xuzhongxing@gmail.com> | 2010-08-03 06:34:25 +0000 |
| commit | 42b8c30de6c36b415d3ae7b6f962d3e84c936882 (patch) | |
| tree | 36ce2fe742d475fe0a19d5f3c1e15f8589ef0650 /clang/lib/Checker | |
| parent | 26ce60c00ed4c42e00500415ae7af09b13cc6429 (diff) | |
| download | bcm5719-llvm-42b8c30de6c36b415d3ae7b6f962d3e84c936882.tar.gz bcm5719-llvm-42b8c30de6c36b415d3ae7b6f962d3e84c936882.zip | |
Allow offsets to be negative. Out-of-bound cases are checked elsewhere. We
shouldn't put restrictions in store manager.
llvm-svn: 110106
Diffstat (limited to 'clang/lib/Checker')
| -rw-r--r-- | clang/lib/Checker/FlatStore.cpp | 8 | ||||
| -rw-r--r-- | clang/lib/Checker/MemRegion.cpp | 3 |
2 files changed, 5 insertions, 6 deletions
diff --git a/clang/lib/Checker/FlatStore.cpp b/clang/lib/Checker/FlatStore.cpp index e1683e5009c..9e7aa753eec 100644 --- a/clang/lib/Checker/FlatStore.cpp +++ b/clang/lib/Checker/FlatStore.cpp @@ -78,7 +78,7 @@ private: public: const MemRegion *R; Interval I; - RegionInterval(const MemRegion *r, uint64_t s, uint64_t e) : R(r), I(s, e){} + RegionInterval(const MemRegion *r, int64_t s, int64_t e) : R(r), I(s, e){} }; RegionInterval RegionToInterval(const MemRegion *R); @@ -186,7 +186,7 @@ FlatStoreManager::RegionToInterval(const MemRegion *R) { switch (R->getKind()) { case MemRegion::VarRegionKind: { QualType T = cast<VarRegion>(R)->getValueType(Ctx); - uint64_t Size = Ctx.getTypeSize(T); + int64_t Size = Ctx.getTypeSize(T); return RegionInterval(R, 0, Size-1); } @@ -197,8 +197,8 @@ FlatStoreManager::RegionToInterval(const MemRegion *R) { // with symbolic offsets. if (!Offset.getRegion()) return RegionInterval(0, 0, 0); - uint64_t Start = Offset.getOffset(); - uint64_t Size = Ctx.getTypeSize(cast<TypedRegion>(R)->getValueType(Ctx)); + int64_t Start = Offset.getOffset(); + int64_t Size = Ctx.getTypeSize(cast<TypedRegion>(R)->getValueType(Ctx)); return RegionInterval(Offset.getRegion(), Start, Start+Size); } diff --git a/clang/lib/Checker/MemRegion.cpp b/clang/lib/Checker/MemRegion.cpp index 87eed2a2872..58006708fa1 100644 --- a/clang/lib/Checker/MemRegion.cpp +++ b/clang/lib/Checker/MemRegion.cpp @@ -830,7 +830,7 @@ RegionRawOffset ElementRegion::getAsArrayOffset() const { RegionOffset MemRegion::getAsOffset() const { const MemRegion *R = this; - uint64_t Offset = 0; + int64_t Offset = 0; while (1) { switch (R->getKind()) { @@ -854,7 +854,6 @@ RegionOffset MemRegion::getAsOffset() const { SVal Index = ER->getIndex(); if (const nonloc::ConcreteInt *CI=dyn_cast<nonloc::ConcreteInt>(&Index)) { int64_t i = CI->getValue().getSExtValue(); - assert(i >= 0); CharUnits Size = getContext().getTypeSizeInChars(EleTy); Offset += i * Size.getQuantity() * 8; } else { |

