[cfe-commits] r105099 - in /cfe/trunk: lib/Checker/RegionStore.cpp test/Analysis/PR7218.c
Zhongxing Xu
xuzhongxing at gmail.com
Fri May 28 23:49:04 PDT 2010
Author: zhongxingxu
Date: Sat May 29 01:49:04 2010
New Revision: 105099
URL: http://llvm.org/viewvc/llvm-project?rev=105099&view=rev
Log:
Revert r105097. Thinking about a better fix.
Modified:
cfe/trunk/lib/Checker/RegionStore.cpp
cfe/trunk/test/Analysis/PR7218.c
Modified: cfe/trunk/lib/Checker/RegionStore.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Checker/RegionStore.cpp?rev=105099&r1=105098&r2=105099&view=diff
==============================================================================
--- cfe/trunk/lib/Checker/RegionStore.cpp (original)
+++ cfe/trunk/lib/Checker/RegionStore.cpp Sat May 29 01:49:04 2010
@@ -213,11 +213,6 @@
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 @@
//===----------------------------------------------------------------------===//
// 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 @@
// 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 @@
// 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);
}
Modified: cfe/trunk/test/Analysis/PR7218.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/PR7218.c?rev=105099&r1=105098&r2=105099&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/PR7218.c (original)
+++ cfe/trunk/test/Analysis/PR7218.c Sat May 29 01:49:04 2010
@@ -1,4 +1,5 @@
// RUN: %clang_cc1 -analyze -analyzer-check-objc-mem -analyzer-store region -verify %s
+// XFAIL: *
char PR7218(char a) {
char buf[2];
buf[0] = a;
More information about the cfe-commits
mailing list