From 748c7ce4bab8396f6d5f93e738b710d24b365d43 Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Tue, 15 Apr 2008 23:44:31 +0000 Subject: Added initial boilerplate to support toll-free bridging in the ref-count checker. llvm-svn: 49756 --- clang/lib/Analysis/CFRefCount.cpp | 40 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'clang/lib/Analysis/CFRefCount.cpp') diff --git a/clang/lib/Analysis/CFRefCount.cpp b/clang/lib/Analysis/CFRefCount.cpp index ff8b3e5e697..051cad341f5 100644 --- a/clang/lib/Analysis/CFRefCount.cpp +++ b/clang/lib/Analysis/CFRefCount.cpp @@ -600,6 +600,18 @@ public: CallExpr* CE, LVal L, ExplodedNode* Pred); + virtual void EvalObjCMessageExpr(ExplodedNodeSet& Dst, + GRExprEngine& Engine, + GRStmtNodeBuilder& Builder, + ObjCMessageExpr* ME, + ExplodedNode* Pred); + + bool EvalObjCMessageExprAux(ExplodedNodeSet& Dst, + GRExprEngine& Engine, + GRStmtNodeBuilder& Builder, + ObjCMessageExpr* ME, + ExplodedNode* Pred); + // End-of-path. virtual void EvalEndPath(GRExprEngine& Engine, @@ -802,6 +814,34 @@ void CFRefCount::EvalCall(ExplodedNodeSet& Dst, Builder.MakeNode(Dst, CE, Pred, St); } + +void CFRefCount::EvalObjCMessageExpr(ExplodedNodeSet& Dst, + GRExprEngine& Eng, + GRStmtNodeBuilder& Builder, + ObjCMessageExpr* ME, + ExplodedNode* Pred) { + + if (EvalObjCMessageExprAux(Dst, Eng, Builder, ME, Pred)) + GRSimpleVals::EvalObjCMessageExpr(Dst, Eng, Builder, ME, Pred); +} + +bool CFRefCount::EvalObjCMessageExprAux(ExplodedNodeSet& Dst, + GRExprEngine& Eng, + GRStmtNodeBuilder& Builder, + ObjCMessageExpr* ME, + ExplodedNode* Pred) { + + // Handle "toll-free bridging." Eventually we will want to track the + // underlying object type associated. + + Selector S = ME->getSelector(); + + if (!S.isUnarySelector()) + return true; + + return true; // FIXME: change to return false when more is implemented. +} + // End-of-path. void CFRefCount::EvalEndPath(GRExprEngine& Engine, -- cgit v1.2.3