diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-04-15 23:44:31 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-04-15 23:44:31 +0000 |
commit | 748c7ce4bab8396f6d5f93e738b710d24b365d43 (patch) | |
tree | ba2d3ed99c4c3b5a461c63ec78e31aeed33d4a34 /clang/lib/Analysis/CFRefCount.cpp | |
parent | 8e5d812e9ddcad14eeac786d466d84fdb6438f9c (diff) | |
download | bcm5719-llvm-748c7ce4bab8396f6d5f93e738b710d24b365d43.tar.gz bcm5719-llvm-748c7ce4bab8396f6d5f93e738b710d24b365d43.zip |
Added initial boilerplate to support toll-free bridging in the ref-count checker.
llvm-svn: 49756
Diffstat (limited to 'clang/lib/Analysis/CFRefCount.cpp')
-rw-r--r-- | clang/lib/Analysis/CFRefCount.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
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<ValueState>* Pred); + virtual void EvalObjCMessageExpr(ExplodedNodeSet<ValueState>& Dst, + GRExprEngine& Engine, + GRStmtNodeBuilder<ValueState>& Builder, + ObjCMessageExpr* ME, + ExplodedNode<ValueState>* Pred); + + bool EvalObjCMessageExprAux(ExplodedNodeSet<ValueState>& Dst, + GRExprEngine& Engine, + GRStmtNodeBuilder<ValueState>& Builder, + ObjCMessageExpr* ME, + ExplodedNode<ValueState>* Pred); + // End-of-path. virtual void EvalEndPath(GRExprEngine& Engine, @@ -802,6 +814,34 @@ void CFRefCount::EvalCall(ExplodedNodeSet<ValueState>& Dst, Builder.MakeNode(Dst, CE, Pred, St); } + +void CFRefCount::EvalObjCMessageExpr(ExplodedNodeSet<ValueState>& Dst, + GRExprEngine& Eng, + GRStmtNodeBuilder<ValueState>& Builder, + ObjCMessageExpr* ME, + ExplodedNode<ValueState>* Pred) { + + if (EvalObjCMessageExprAux(Dst, Eng, Builder, ME, Pred)) + GRSimpleVals::EvalObjCMessageExpr(Dst, Eng, Builder, ME, Pred); +} + +bool CFRefCount::EvalObjCMessageExprAux(ExplodedNodeSet<ValueState>& Dst, + GRExprEngine& Eng, + GRStmtNodeBuilder<ValueState>& Builder, + ObjCMessageExpr* ME, + ExplodedNode<ValueState>* 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, |