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))