From 42a217f4c01137004382df81f2b81a6fcf39ac56 Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Tue, 9 Dec 2008 23:50:57 +0000 Subject: Fix to BasicStoreManager::getElementLValue: If the base region is a symbol, layer an AnonTypedRegion on top of it. llvm-svn: 60808 --- clang/lib/Analysis/BasicStore.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'clang/lib/Analysis/BasicStore.cpp') diff --git a/clang/lib/Analysis/BasicStore.cpp b/clang/lib/Analysis/BasicStore.cpp index 31d392e80f4..207f6096090 100644 --- a/clang/lib/Analysis/BasicStore.cpp +++ b/clang/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: -- cgit v1.2.3