Index: lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp
===================================================================
--- lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp	(revision 166162)
+++ lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp	(working copy)
@@ -41,6 +41,7 @@
   void CheckCallocZero(CheckerContext &C, const CallExpr *CE) const;
   void CheckMallocZero(CheckerContext &C, const CallExpr *CE) const;
   void CheckReallocZero(CheckerContext &C, const CallExpr *CE) const;
+  void CheckReallocfZero(CheckerContext &C, const CallExpr *CE) const;
   void CheckAllocaZero(CheckerContext &C, const CallExpr *CE) const;
   void CheckVallocZero(CheckerContext &C, const CallExpr *CE) const;
 
@@ -187,7 +188,8 @@
 }
 
 //===----------------------------------------------------------------------===//
-// "calloc", "malloc", "realloc", "alloca" and "valloc" with allocation size 0
+// "calloc", "malloc", "realloc", "reallocf", "alloca" and "valloc"
+// with allocation size 0
 //===----------------------------------------------------------------------===//
 // FIXME: Eventually these should be rolled into the MallocChecker, but right now
 // they're more basic and valuable for widespread use.
@@ -307,6 +309,11 @@
   BasicAllocationCheck(C, CE, 2, 1, "realloc");
 }
 
+void UnixAPIChecker::CheckReallocfZero(CheckerContext &C,
+                                       const CallExpr *CE) const {
+  BasicAllocationCheck(C, CE, 2, 1, "reallocf");
+}
+
 void UnixAPIChecker::CheckAllocaZero(CheckerContext &C,
                                      const CallExpr *CE) const {
   BasicAllocationCheck(C, CE, 1, 0, "alloca");
@@ -339,6 +346,7 @@
       .Case("calloc", &UnixAPIChecker::CheckCallocZero)
       .Case("malloc", &UnixAPIChecker::CheckMallocZero)
       .Case("realloc", &UnixAPIChecker::CheckReallocZero)
+      .Case("reallocf", &UnixAPIChecker::CheckReallocfZero)
       .Cases("alloca", "__builtin_alloca", &UnixAPIChecker::CheckAllocaZero)
       .Case("valloc", &UnixAPIChecker::CheckVallocZero)
       .Default(NULL);
Index: test/Analysis/unix-fns.c
===================================================================
--- test/Analysis/unix-fns.c	(revision 166162)
+++ test/Analysis/unix-fns.c	(working copy)
@@ -13,6 +13,7 @@
 void *calloc(size_t, size_t);
 void *malloc(size_t);
 void *realloc(void *, size_t);
+void *reallocf(void *, size_t);
 void *alloca(size_t);
 void *valloc(size_t);
 
@@ -113,12 +114,24 @@
     foo[i] = 0;
   }
 }
+void test_reallocf(char *ptr) {
+  char *foo = reallocf(ptr, 0); // expected-warning{{Call to 'reallocf' has an allocation size of 0 bytes}}
+  for (unsigned i = 0; i < 100; i++) {
+    foo[i] = 0;
+  }
+}
 void test_realloc_nowarn(char *ptr, size_t size) {
   char *foo = realloc(ptr, size); // no-warning
   for (unsigned i = 0; i < 100; i++) {
     foo[i] = 0;
   }
 }
+void test_reallocf_nowarn(char *ptr, size_t size) {
+  char *foo = reallocf(ptr, size); // no-warning
+  for (unsigned i = 0; i < 100; i++) {
+    foo[i] = 0;
+  }
+}
 void test_alloca() {
   char *foo = alloca(0); // expected-warning{{Call to 'alloca' has an allocation size of 0 bytes}}
   for(unsigned i = 0; i < 100; i++) {
