зеркало из https://github.com/microsoft/clang.git
Like for symbolic region, automatically create a element zero region for
alloca region. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@95539 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
52535688b1
Коммит
8149185422
|
@ -354,8 +354,7 @@ public: // Part of public interface to class.
|
|||
Store CopyLazyBindings(nonloc::LazyCompoundVal V, Store store,
|
||||
const TypedRegion *R);
|
||||
|
||||
const ElementRegion *GetElementZeroRegion(const SymbolicRegion *SR,
|
||||
QualType T);
|
||||
const ElementRegion *GetElementZeroRegion(const MemRegion *R, QualType T);
|
||||
|
||||
//===------------------------------------------------------------------===//
|
||||
// State pruning.
|
||||
|
@ -927,11 +926,11 @@ static bool IsReinterpreted(QualType RTy, QualType UsedTy, ASTContext &Ctx) {
|
|||
}
|
||||
|
||||
const ElementRegion *
|
||||
RegionStoreManager::GetElementZeroRegion(const SymbolicRegion *SR, QualType T) {
|
||||
RegionStoreManager::GetElementZeroRegion(const MemRegion *R, QualType T) {
|
||||
ASTContext &Ctx = getContext();
|
||||
SVal idx = ValMgr.makeZeroArrayIndex();
|
||||
assert(!T.isNull());
|
||||
return MRMgr.getElementRegion(T, idx, SR, Ctx);
|
||||
return MRMgr.getElementRegion(T, idx, R, Ctx);
|
||||
}
|
||||
|
||||
SVal RegionStoreManager::Retrieve(Store store, Loc L, QualType T) {
|
||||
|
@ -945,17 +944,8 @@ SVal RegionStoreManager::Retrieve(Store store, Loc L, QualType T) {
|
|||
|
||||
const MemRegion *MR = cast<loc::MemRegionVal>(L).getRegion();
|
||||
|
||||
// FIXME: return symbolic value for these cases.
|
||||
// Example:
|
||||
// void f(int* p) { int x = *p; }
|
||||
// char* p = alloca();
|
||||
// read(p);
|
||||
// c = *p;
|
||||
if (isa<AllocaRegion>(MR))
|
||||
return UnknownVal();
|
||||
|
||||
if (const SymbolicRegion *SR = dyn_cast<SymbolicRegion>(MR))
|
||||
MR = GetElementZeroRegion(SR, T);
|
||||
if (isa<AllocaRegion>(MR) || isa<SymbolicRegion>(MR))
|
||||
MR = GetElementZeroRegion(MR, T);
|
||||
|
||||
if (isa<CodeTextRegion>(MR))
|
||||
return UnknownVal();
|
||||
|
|
Загрузка…
Ссылка в новой задаче