From: Ted Kremenek Date: Tue, 9 Dec 2008 23:50:57 +0000 (+0000) Subject: Fix to BasicStoreManager::getElementLValue: If the base region is a symbol, layer... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1d6c14bd27ee4945aa453ab2e8d2b3dfca374318;p=clang Fix to BasicStoreManager::getElementLValue: If the base region is a symbol, layer an AnonTypedRegion on top of it. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60808 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/BasicStore.cpp b/lib/Analysis/BasicStore.cpp index 31d392e80f..207f609609 100644 --- a/lib/Analysis/BasicStore.cpp +++ b/lib/Analysis/BasicStore.cpp @@ -174,9 +174,20 @@ SVal BasicStoreManager::getLValueElement(const GRState* St, SVal Base, const MemRegion* BaseR = 0; switch(BaseL.getSubKind()) { - case loc::SymbolValKind: - BaseR = MRMgr.getSymbolicRegion(cast(&BaseL)->getSymbol()); + case loc::SymbolValKind: { + // FIXME: Should we have symbolic regions be typed or typeless? + // Here we assume that these regions are typeless, even though the + // symbol is typed. + SymbolRef Sym = cast(&BaseL)->getSymbol(); + // Create a region to represent this symbol. + // FIXME: In the future we may just use symbolic regions instead of + // SymbolVals to reason about symbolic memory chunks. + const MemRegion* SymR = MRMgr.getSymbolicRegion(Sym); + // Layered a typed region on top of this. + QualType T = StateMgr.getSymbolManager().getType(Sym); + BaseR = MRMgr.getAnonTypedRegion(T, SymR); break; + } case loc::GotoLabelKind: case loc::FuncValKind: