From 667cacb2ff2c25ce786488623620d9894aeb965c Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Tue, 15 Apr 2008 23:06:53 +0000 Subject: Added some comments to GRExprEngine. Reorder some of the method definitions to start logically organizing them. Added initial plug-in transfer function support for Objective-C message expressions. llvm-svn: 49752 --- clang/lib/Analysis/GRSimpleVals.cpp | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'clang/lib/Analysis/GRSimpleVals.cpp') diff --git a/clang/lib/Analysis/GRSimpleVals.cpp b/clang/lib/Analysis/GRSimpleVals.cpp index dabae43523c..c8805ab7757 100644 --- a/clang/lib/Analysis/GRSimpleVals.cpp +++ b/clang/lib/Analysis/GRSimpleVals.cpp @@ -552,7 +552,7 @@ RVal GRSimpleVals::EvalNE(GRExprEngine& Eng, LVal L, LVal R) { } //===----------------------------------------------------------------------===// -// Transfer function for Function Calls. +// Transfer function for function calls. //===----------------------------------------------------------------------===// void GRSimpleVals::EvalCall(ExplodedNodeSet& Dst, @@ -590,3 +590,32 @@ void GRSimpleVals::EvalCall(ExplodedNodeSet& Dst, Builder.MakeNode(Dst, CE, Pred, St); } + +//===----------------------------------------------------------------------===// +// Transfer function for Objective-C message expressions. +//===----------------------------------------------------------------------===// + +void GRSimpleVals::EvalObjCMessageExpr(ExplodedNodeSet& Dst, + GRExprEngine& Eng, + GRStmtNodeBuilder& Builder, + ObjCMessageExpr* ME, + ExplodedNode* Pred) { + + + // The basic transfer function logic for message expressions does nothing. + // We just invalidate all arguments passed in by references. + + ValueStateManager& StateMgr = Eng.getStateManager(); + ValueState* St = Builder.GetState(Pred); + + for (ObjCMessageExpr::arg_iterator I = ME->arg_begin(), E = ME->arg_end(); + I != E; ++I) { + + RVal V = StateMgr.GetRVal(St, *I); + + if (isa(V)) + St = StateMgr.SetRVal(St, cast(V), UnknownVal()); + } + + Builder.MakeNode(Dst, ME, Pred, St); +} -- cgit v1.2.3