Index: test/Analysis/retain-release.m
===================================================================
--- test/Analysis/retain-release.m	(revision 167196)
+++ test/Analysis/retain-release.m	(working copy)
@@ -519,6 +519,7 @@
   else {
     CFRetain(p); // expected-warning{{Null pointer argument in call to CFRetain}}
   }
+  // TODO: add CFMakeCollectable test here?
 }
 
 // Test that an object is non-null after being CFRetained/CFReleased.
@@ -533,6 +534,7 @@
     if (!p)
       CFRetain(0); // no-warning
   }
+  // TODO: add CFMakeCollectable test here?
 }
 
 // Test basic tracking of ivars associated with 'self'.  For the retain/release
Index: test/Analysis/diagnostics/undef-value-param.m
===================================================================
--- test/Analysis/diagnostics/undef-value-param.m	(revision 167196)
+++ test/Analysis/diagnostics/undef-value-param.m	(working copy)
@@ -460,7 +460,7 @@
 //CHECK:     </array>
 //CHECK:     <key>description</key><string>Null pointer argument in call to CFRelease</string>
 //CHECK:     <key>category</key><string>API Misuse (Apple)</string>
-//CHECK:     <key>type</key><string>null passed to CFRetain/CFRelease</string>
+//CHECK:     <key>type</key><string>null passed to CFRetain/CFRelease/CFMakeCollectable</string>
 //CHECK:    <key>issue_context_kind</key><string>Objective-C method</string>
 //CHECK:    <key>issue_context</key><string>test</string>
 //CHECK:    <key>issue_hash</key><integer>5</integer>
Index: www/analyzer/available_checks.html
===================================================================
--- www/analyzer/available_checks.html	(revision 167196)
+++ www/analyzer/available_checks.html	(working copy)
@@ -125,7 +125,7 @@
 <td><b>osx.coreFoundation.CFNumber</b></td><td>Check for proper uses of CFNumberCreate.</td>
 </tr>
 <tr>
-<td><b>osx.coreFoundation.CFRetainRelease</b></td><td>Check for null arguments to CFRetain/CFRelease.</td>
+<td><b>osx.coreFoundation.CFRetainRelease</b></td><td>Check for null arguments to CFRetain/CFRelease/CFMakeCollectable.</td>
 </tr>
 <tr>
 <td><b>osx.coreFoundation.containers.OutOfBounds</b></td><td>Checks for index out-of-bounds when using 'CFArray' API.</td>
Index: tools/scan-build/scan-build.1
===================================================================
--- tools/scan-build/scan-build.1	(revision 167196)
+++ tools/scan-build/scan-build.1	(working copy)
@@ -270,9 +270,10 @@
 .Fn CFNumberCreate .
 .It osx.coreFoundation.CFRetainRelease
 Check for null arguments to
-.Fn CFRetain
+.Fn CFRetain ,
+.Fn CFRelease ,
 and
-.Fn CFRelease .
+.Fn CFMakeCollectable .
 .It osx.coreFoundation.containers.OutOfBounds
 Checks for index out-of-bounds when using the
 .Vt CFArray
Index: lib/StaticAnalyzer/Checkers/Checkers.td
===================================================================
--- lib/StaticAnalyzer/Checkers/Checkers.td	(revision 167196)
+++ lib/StaticAnalyzer/Checkers/Checkers.td	(working copy)
@@ -433,7 +433,7 @@
   DescFile<"BasicObjCFoundationChecks.cpp">;
 
 def CFRetainReleaseChecker : Checker<"CFRetainRelease">,
-  HelpText<"Check for null arguments to CFRetain/CFRelease">,
+  HelpText<"Check for null arguments to CFRetain/CFRelease/CFMakeCollectable">,
   DescFile<"BasicObjCFoundationChecks.cpp">;
 
 def CFErrorChecker : Checker<"CFError">,
Index: lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp
===================================================================
--- lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp	(revision 167196)
+++ lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp	(working copy)
@@ -363,15 +363,15 @@
 }
 
 //===----------------------------------------------------------------------===//
-// CFRetain/CFRelease checking for null arguments.
+// CFRetain/CFRelease/CFMakeCollectable checking for null arguments.
 //===----------------------------------------------------------------------===//
 
 namespace {
 class CFRetainReleaseChecker : public Checker< check::PreStmt<CallExpr> > {
   mutable OwningPtr<APIMisuse> BT;
-  mutable IdentifierInfo *Retain, *Release;
+  mutable IdentifierInfo *Retain, *Release, *MakeCollectable;
 public:
-  CFRetainReleaseChecker(): Retain(0), Release(0) {}
+  CFRetainReleaseChecker(): Retain(0), Release(0), MakeCollectable(0) {}
   void checkPreStmt(const CallExpr *CE, CheckerContext &C) const;
 };
 } // end anonymous namespace
@@ -392,12 +392,13 @@
     ASTContext &Ctx = C.getASTContext();
     Retain = &Ctx.Idents.get("CFRetain");
     Release = &Ctx.Idents.get("CFRelease");
-    BT.reset(new APIMisuse("null passed to CFRetain/CFRelease"));
+    MakeCollectable = &Ctx.Idents.get("CFMakeCollectable");
+    BT.reset(new APIMisuse("null passed to CFRetain/CFRelease/CFMakeCollectable"));
   }
 
-  // Check if we called CFRetain/CFRelease.
+  // Check if we called CFRetain/CFRelease/CFMakeCollectable.
   const IdentifierInfo *FuncII = FD->getIdentifier();
-  if (!(FuncII == Retain || FuncII == Release))
+  if (!(FuncII == Retain || FuncII == Release || FuncII == MakeCollectable))
     return;
 
   // FIXME: The rest of this just checks that the argument is non-null.
@@ -426,10 +427,15 @@
     if (!N)
       return;
 
-    const char *description = (FuncII == Retain)
-                            ? "Null pointer argument in call to CFRetain"
-                            : "Null pointer argument in call to CFRelease";
-
+    const char *description = 0;
+    if (FuncII == Retain) {
+      description = "Null pointer argument in call to CFRetain";
+    } else if (FuncII == Release) {
+      description = "Null pointer argument in call to CFRelease";
+    } else if (FuncII == MakeCollectable) {
+      description = "Null pointer argument in call to CFMakeCollectable";
+    }
+    
     BugReport *report = new BugReport(*BT, description, N);
     report->addRange(Arg->getSourceRange());
     bugreporter::trackNullOrUndefValue(N, Arg, *report);
