From: Ted Kremenek Date: Thu, 31 Jan 2008 02:35:41 +0000 (+0000) Subject: Added transfer function support for unary '&' and '*', providing basic X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=64924859b6b09d1cfb62fecf5954ec6c27cb58fe;p=clang 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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46595 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Analysis/GRConstants.cpp b/Analysis/GRConstants.cpp index b7d068a118..d6b078d26c 100644 --- a/Analysis/GRConstants.cpp +++ b/Analysis/GRConstants.cpp @@ -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(this)->getDecl()->getIdentifier(); + Out << '&' + << cast(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 : } } - Out << "\\|"; + Out << "\\|StateID: " << (void*) N->getState().getRoot() << "\\|"; PrintKind(Out, N->getState(), ValueKey::IsDecl, true); PrintKind(Out, N->getState(), ValueKey::IsBlkExpr);