From: Zhongxing Xu Date: Sat, 21 Aug 2010 11:00:26 +0000 (+0000) Subject: Remove a special case for OSAtomic functions. We can already bind and retrieve X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=46d1a4f046e5a7d35a7857be271b6701823542fa;p=clang Remove a special case for OSAtomic functions. We can already bind and retrieve with the same binding key. The only trick here is that sometimes the Symbolic region is stored in with an LocAsInteger wrapper. We unwrap that in SVal::getAsLocSymbol(). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@111734 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Checker/RegionStore.cpp b/lib/Checker/RegionStore.cpp index 97344939d3..4afa96a461 100644 --- a/lib/Checker/RegionStore.cpp +++ b/lib/Checker/RegionStore.cpp @@ -1326,14 +1326,8 @@ Store RegionStoreManager::Bind(Store store, Loc L, SVal V) { if (const TypedRegion *superR = dyn_cast(ER->getSuperRegion())) { QualType superTy = superR->getValueType(); - QualType erTy = ER->getValueType(); - - if (IsAnyPointerOrIntptr(superTy, Ctx) && - IsAnyPointerOrIntptr(erTy, Ctx)) { - V = ValMgr.getSValuator().EvalCast(V, superTy, erTy); - return Bind(store, loc::MemRegionVal(superR), V); - } // For now, just invalidate the fields of the struct/union/class. + // This is for test: undef-buffers.c // FIXME: Precisely handle the fields of the record. if (superTy->isStructureOrClassType()) return KillStruct(store, superR, UnknownVal()); diff --git a/lib/Checker/SVals.cpp b/lib/Checker/SVals.cpp index 7a99e8681d..3248b0fea2 100644 --- a/lib/Checker/SVals.cpp +++ b/lib/Checker/SVals.cpp @@ -62,6 +62,9 @@ const FunctionDecl *SVal::getAsFunctionDecl() const { /// wraps a symbol, return that SymbolRef. Otherwise return 0. // FIXME: should we consider SymbolRef wrapped in CodeTextRegion? SymbolRef SVal::getAsLocSymbol() const { + if (const nonloc::LocAsInteger *X = dyn_cast(this)) + return X->getLoc().getAsLocSymbol(); + if (const loc::MemRegionVal *X = dyn_cast(this)) { const MemRegion *R = X->StripCasts(); if (const SymbolicRegion *SymR = dyn_cast(R))