diff options
| author | Zhongxing Xu <xuzhongxing@gmail.com> | 2010-05-29 06:49:04 +0000 |
|---|---|---|
| committer | Zhongxing Xu <xuzhongxing@gmail.com> | 2010-05-29 06:49:04 +0000 |
| commit | 94aec9381d70743ad222f40ff2addb1ba9d836d1 (patch) | |
| tree | 8fae207955853fd728bd77ec38784b441ae9c730 /clang/lib/Checker | |
| parent | 9ab9a7fb293c457755d0c3ad9cc4256a3e7c057a (diff) | |
| download | bcm5719-llvm-94aec9381d70743ad222f40ff2addb1ba9d836d1.tar.gz bcm5719-llvm-94aec9381d70743ad222f40ff2addb1ba9d836d1.zip | |
Revert r105097. Thinking about a better fix.
llvm-svn: 105099
Diffstat (limited to 'clang/lib/Checker')
| -rw-r--r-- | clang/lib/Checker/RegionStore.cpp | 23 |
1 files changed, 5 insertions, 18 deletions
diff --git a/clang/lib/Checker/RegionStore.cpp b/clang/lib/Checker/RegionStore.cpp index c25d2095b13..2200ef1002e 100644 --- a/clang/lib/Checker/RegionStore.cpp +++ b/clang/lib/Checker/RegionStore.cpp @@ -213,11 +213,6 @@ public: RegionStoreSubRegionMap *getRegionStoreSubRegionMap(Store store); - /// canHaveDirectBinding - Disallow direct bindings for certain types, - /// like arrays. This lets us distinguish between x and x[0], which was - /// causing PR7218 "Assigning to buf[0] makes buf[1] valid". - bool canHaveDirectBinding (const MemRegion *R); - Optional<SVal> getBinding(RegionBindings B, const MemRegion *R); Optional<SVal> getDirectBinding(RegionBindings B, const MemRegion *R); /// getDefaultBinding - Returns an SVal* representing an optional default @@ -949,20 +944,12 @@ SVal RegionStoreManager::EvalBinOp(BinaryOperator::Opcode Op, Loc L, NonLoc R, //===----------------------------------------------------------------------===// // Loading values from regions. //===----------------------------------------------------------------------===// -bool RegionStoreManager::canHaveDirectBinding (const MemRegion *R) { - // Arrays can't have direct binding -- must bind to elements - if (const TypedRegion *TR = dyn_cast<TypedRegion>(R)) - if (TR->getValueType(getContext())->isArrayType()) - return false; - - return true; -} Optional<SVal> RegionStoreManager::getDirectBinding(RegionBindings B, const MemRegion *R) { - if (canHaveDirectBinding(R)) - if (const SVal *V = Lookup(B, R, BindingKey::Direct)) - return *V; + + if (const SVal *V = Lookup(B, R, BindingKey::Direct)) + return *V; return Optional<SVal>(); } @@ -1188,8 +1175,9 @@ SVal RegionStoreManager::RetrieveElement(Store store, // Check if the immediate super region has a direct binding. if (const Optional<SVal> &V = getDirectBinding(B, superR)) { - if (SymbolRef parentSym = V->getAsSymbol()) + if (SymbolRef parentSym = V->getAsSymbol()) { return ValMgr.getDerivedRegionValueSymbolVal(parentSym, R); + } if (V->isUnknownOrUndef()) return *V; @@ -1198,7 +1186,6 @@ SVal RegionStoreManager::RetrieveElement(Store store, // are handled in 'RetrieveFieldOrElementCommon'. if (const nonloc::LazyCompoundVal *LCV = dyn_cast<nonloc::LazyCompoundVal>(V)) { - R = MRMgr.getElementRegionWithSuper(R, LCV->getRegion()); return RetrieveElement(LCV->getStore(), R); } |

