diff --git a/include/clang/Sema/Sema.h b/include/clang/Sema/Sema.h
index 70c40e1..871cb95 100644
--- a/include/clang/Sema/Sema.h
+++ b/include/clang/Sema/Sema.h
@@ -819,6 +819,7 @@ public:
 
   /// \brief Get a string to suggest for zero-initialization of a type.
   const char *getFixItZeroInitializerForType(QualType T) const;
+  const char *getFixItZeroLiteralForType(QualType T) const;
 
   ExprResult Owned(Expr* E) { return E; }
   ExprResult Owned(ExprResult R) { return R; }
diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp
index 7ab05c4..fbd9a8d 100644
--- a/lib/Sema/SemaChecking.cpp
+++ b/lib/Sema/SemaChecking.cpp
@@ -4079,7 +4079,8 @@ void CheckImplicitConversion(Sema &S, Expr *E, QualType T,
     if (Loc.isMacroID())
       Loc = S.SourceMgr.getImmediateExpansionRange(Loc).first;
     S.Diag(Loc, diag::warn_impcast_null_pointer_to_integer)
-        << T << Loc << clang::SourceRange(CC);
+        << T << clang::SourceRange(CC)
+        << FixItHint::CreateReplacement(Loc, S.getFixItZeroLiteralForType(T));
     return;
   }
 
diff --git a/lib/Sema/SemaFixItUtils.cpp b/lib/Sema/SemaFixItUtils.cpp
index b78ea7d..e9c53be 100644
--- a/lib/Sema/SemaFixItUtils.cpp
+++ b/lib/Sema/SemaFixItUtils.cpp
@@ -202,3 +202,13 @@ const char *Sema::getFixItZeroInitializerForType(QualType T) const {
     return " = {}";
   return 0;
 }
+
+const char *Sema::getFixItZeroLiteralForType(QualType T) const {
+  const char *Str = getFixItZeroInitializerForType(T);
+  if (!Str)
+    return Str;
+  size_t Len = std::strlen(Str);
+  assert(Len > 3 && "Should be a non-record type init");
+  assert(strncmp(Str, " = ", 3) == 0 && "Should be non-record type init");
+  return Str + 3;
+}
diff --git a/test/FixIt/fixit.cpp b/test/FixIt/fixit.cpp
index 9ed4f3b..99c09d6 100644
--- a/test/FixIt/fixit.cpp
+++ b/test/FixIt/fixit.cpp
@@ -199,3 +199,6 @@ template<class T> typedef Mystery<T>::type getMysteriousThing() { // \
   expected-error {{missing 'typename' prior to dependent}}
   return Mystery<T>::get();
 }
+
+#define NULL __null
+char c = NULL; // expected-warning {{implicit conversion of NULL constant to 'char'}}
