Added transfer function support for unary '&' and '*', providing basic

(local) aliasing support.

Modified ExplodedGraph pretty-printer (for GRConstants) to also print out the
pointer value of the state associated with a node.  This way one can easily
see that two states are identical.

llvm-svn: 46595
This commit is contained in:
Ted Kremenek 2008-01-31 02:35:41 +00:00
parent fbcf676a65
commit a0be8264b5
1 changed files with 16 additions and 3 deletions

View File

@ -1,5 +1,5 @@
//===-- GRConstants.cpp - Simple, Path-Sens. Constant Prop. ------*- C++ -*-==//
//
//
// The LLValM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
@ -733,7 +733,8 @@ void LValue::print(std::ostream& Out) const {
break;
case LValueDeclKind:
Out << cast<LValueDecl>(this)->getDecl()->getIdentifier();
Out << '&'
<< cast<LValueDecl>(this)->getDecl()->getIdentifier()->getName();
break;
default:
@ -1277,6 +1278,18 @@ void GRConstants::VisitUnaryOperator(UnaryOperator* U,
break;
}
case UnaryOperator::AddrOf: {
const LValue& L1 = GetLValue(St, U->getSubExpr());
Nodify(Dst, U, N1, SetValue(St, U, L1));
break;
}
case UnaryOperator::Deref: {
const LValue& L1 = GetLValue(St, U->getSubExpr());
Nodify(Dst, U, N1, SetValue(St, U, GetValue(St, L1)));
break;
}
default: ;
assert (false && "Not implemented.");
}
@ -1608,7 +1621,7 @@ struct VISIBILITY_HIDDEN DOTGraphTraits<GRConstants::NodeTy*> :
}
}
Out << "\\|";
Out << "\\|StateID: " << (void*) N->getState().getRoot() << "\\|";
PrintKind(Out, N->getState(), ValueKey::IsDecl, true);
PrintKind(Out, N->getState(), ValueKey::IsBlkExpr);