diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-09-29 03:12:50 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-09-29 03:12:50 +0000 |
commit | 389c44c5540f215712de0758855898297e4aed42 (patch) | |
tree | 45c88bd57666737cd6a2a1615a7ee78c5fbad8b7 /lib/Analysis/RegionStore.cpp | |
parent | e9d34dc7afe06c9adaacad7a678a0cbbf749ea75 (diff) |
Revert r82939. We can only not special case FieldRegions when the super region has also been invalidated.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83040 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/RegionStore.cpp')
-rw-r--r-- | lib/Analysis/RegionStore.cpp | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/lib/Analysis/RegionStore.cpp b/lib/Analysis/RegionStore.cpp index 5d3fa7292b..da04d68dcf 100644 --- a/lib/Analysis/RegionStore.cpp +++ b/lib/Analysis/RegionStore.cpp @@ -514,21 +514,17 @@ const GRState *RegionStoreManager::InvalidateRegion(const GRState *state, continue; } + // FIXME: Special case FieldRegion/ElementRegion for more + // efficient invalidation. We don't need to conjure symbols for + // these regions in all cases. + // Get the old binding. Is it a region? If so, add it to the worklist. if (const SVal *OldV = B.lookup(R)) { if (const MemRegion *RV = OldV->getAsRegion()) WorkList.push_back(RV); } - if (isa<FieldRegion>(R) || isa<ElementRegion>(R) || isa<ObjCIvarRegion>(R)){ - // For fields and elements, only remove the old binding. The super - // region will get set with a default value from which we can lazily - // derive a new symbolic value. - B = RBFactory.Remove(B, R); - continue; - } - - // Invalidate the binding by conjuring a new symbol. + // Invalidate the binding. DefinedOrUnknownSVal V = ValMgr.getConjuredSymbolVal(R, Ex, T, Count); assert(SymbolManager::canSymbolicate(T) || V.isUnknown()); B = RBFactory.Add(B, R, V); |