]> granicus.if.org Git - clang/commitdiff
Added initial boilerplate to support toll-free bridging in the ref-count checker.
authorTed Kremenek <kremenek@apple.com>
Tue, 15 Apr 2008 23:44:31 +0000 (23:44 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 15 Apr 2008 23:44:31 +0000 (23:44 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49756 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/CFRefCount.cpp

index ff8b3e5e6973dc7e4c327a5a95a201beaed7e045..051cad341f526d7fa5ef46da970f28e70e7a020d 100644 (file)
@@ -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,