Initialize tracked local variables to undefined.

llvm-svn: 54716
This commit is contained in:
Ted Kremenek 2008-08-13 03:28:04 +00:00
parent b036db8e66
commit dccd9883c4
2 changed files with 11 additions and 5 deletions

View File

@ -202,10 +202,15 @@ const ValueState* GRExprEngine::getInitialState() {
ScopedDecl *SD = const_cast<ScopedDecl*>(I->first);
if (VarDecl* VD = dyn_cast<VarDecl>(SD)) {
if (VD->hasGlobalStorage() || isa<ParmVarDecl>(VD)) {
RVal X = RVal::GetSymbolValue(SymMgr, VD);
// Initialize globals and parameters to symbolic values.
// Initialize local variables to undefined.
RVal X = (VD->hasGlobalStorage() || isa<ParmVarDecl>(VD) ||
isa<ImplicitParamDecl>(VD))
? RVal::GetSymbolValue(SymMgr, VD)
: UndefinedVal();
StateMgr.SetRVal(StateImpl, lval::DeclVal(VD), X);
}
} else if (ImplicitParamDecl *IPD = dyn_cast<ImplicitParamDecl>(SD)) {
RVal X = RVal::GetSymbolValue(SymMgr, IPD);
StateMgr.SetRVal(StateImpl, lval::DeclVal(IPD), X);

View File

@ -18,7 +18,8 @@ using namespace clang;
SymbolID SymbolManager::getSymbol(VarDecl* D) {
assert (isa<ParmVarDecl>(D) || D->hasGlobalStorage());
assert (isa<ParmVarDecl>(D) || isa<ImplicitParamDecl>(D) ||
D->hasGlobalStorage());
llvm::FoldingSetNodeID profile;