diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Checker/RegionStore.cpp | 8 | ||||
-rw-r--r-- | clang/lib/Checker/SVals.cpp | 3 |
2 files changed, 4 insertions, 7 deletions
diff --git a/clang/lib/Checker/RegionStore.cpp b/clang/lib/Checker/RegionStore.cpp index 97344939d3d..4afa96a4619 100644 --- a/clang/lib/Checker/RegionStore.cpp +++ b/clang/lib/Checker/RegionStore.cpp @@ -1326,14 +1326,8 @@ Store RegionStoreManager::Bind(Store store, Loc L, SVal V) { if (const TypedRegion *superR = dyn_cast<TypedRegion>(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/clang/lib/Checker/SVals.cpp b/clang/lib/Checker/SVals.cpp index 7a99e8681df..3248b0fea25 100644 --- a/clang/lib/Checker/SVals.cpp +++ b/clang/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<nonloc::LocAsInteger>(this)) + return X->getLoc().getAsLocSymbol(); + if (const loc::MemRegionVal *X = dyn_cast<loc::MemRegionVal>(this)) { const MemRegion *R = X->StripCasts(); if (const SymbolicRegion *SymR = dyn_cast<SymbolicRegion>(R)) |