diff --git a/Sema/SemaDecl.cpp b/Sema/SemaDecl.cpp
index e50fe11..8ecbd7c 100644
--- a/Sema/SemaDecl.cpp
+++ b/Sema/SemaDecl.cpp
@@ -391,13 +391,9 @@
          Init->getSourceRange());
     return true;
   case PointerFromInt:
-    // check for null pointer constant (C99 6.3.2.3p3)
-    if (!Init->isNullPointerConstant(Context)) {
-      Diag(loc, diag::ext_typecheck_assign_pointer_int,
-           DeclType.getAsString(), rhsType.getAsString(), 
-           Init->getSourceRange());
-      return true;
-    }
+    Diag(loc, diag::ext_typecheck_assign_pointer_int,
+         DeclType.getAsString(), rhsType.getAsString(), 
+         Init->getSourceRange());
     break;
   case IntFromPointer: 
     Diag(loc, diag::ext_typecheck_assign_pointer_int, 
diff --git a/Sema/SemaExpr.cpp b/Sema/SemaExpr.cpp
index 2cea607..14302aa 100644
--- a/Sema/SemaExpr.cpp
+++ b/Sema/SemaExpr.cpp
@@ -613,12 +613,9 @@
       case Compatible:
         break;
       case PointerFromInt:
-        // check for null pointer constant (C99 6.3.2.3p3)
-        if (!argExpr->isNullPointerConstant(Context)) {
-          Diag(l, diag::ext_typecheck_passing_pointer_int, 
-               lhsType.getAsString(), rhsType.getAsString(),
-               Fn->getSourceRange(), argExpr->getSourceRange());
-        }
+        Diag(l, diag::ext_typecheck_passing_pointer_int, 
+             lhsType.getAsString(), rhsType.getAsString(),
+             Fn->getSourceRange(), argExpr->getSourceRange());
         break;
       case IntFromPointer:
         Diag(l, diag::ext_typecheck_passing_pointer_int, 
@@ -1125,6 +1122,12 @@
 
 Sema::AssignmentCheckResult
 Sema::CheckSingleAssignmentConstraints(QualType lhsType, Expr *&rExpr) {
+  // C99 6.5.16.1p1: the left operand is a pointer and the right is
+  // a null pointer constant.
+  if (lhsType->isPointerType() && rExpr->isNullPointerConstant(Context)) {
+    promoteExprToType(rExpr, lhsType);
+    return Compatible;
+  }
   // This check seems unnatural, however it is necessary to ensure the proper
   // conversion of functions/arrays. If the conversion were done for all
   // DeclExpr's (created by ActOnIdentifierExpr), it would mess up the unary
@@ -1412,12 +1415,9 @@
     hadError = true;
     break;
   case PointerFromInt:
-    // check for null pointer constant (C99 6.3.2.3p3)
-    if (compoundType.isNull() && !rex->isNullPointerConstant(Context)) {
-      Diag(loc, diag::ext_typecheck_assign_pointer_int,
-           lhsType.getAsString(), rhsType.getAsString(),
-           lex->getSourceRange(), rex->getSourceRange());
-    }
+    Diag(loc, diag::ext_typecheck_assign_pointer_int,
+         lhsType.getAsString(), rhsType.getAsString(),
+         lex->getSourceRange(), rex->getSourceRange());
     break;
   case IntFromPointer: 
     Diag(loc, diag::ext_typecheck_assign_pointer_int, 
@@ -2067,12 +2067,9 @@
     case Compatible:
       break;
     case PointerFromInt:
-      // check for null pointer constant (C99 6.3.2.3p3)
-      if (!argExpr->isNullPointerConstant(Context)) {
-        Diag(l, diag::ext_typecheck_sending_pointer_int, 
-             lhsType.getAsString(), rhsType.getAsString(),
-             argExpr->getSourceRange());
-      }
+      Diag(l, diag::ext_typecheck_sending_pointer_int, 
+           lhsType.getAsString(), rhsType.getAsString(),
+           argExpr->getSourceRange());
       break;
     case IntFromPointer:
       Diag(l, diag::ext_typecheck_sending_pointer_int, 
diff --git a/Sema/SemaStmt.cpp b/Sema/SemaStmt.cpp
index d051f6b..d00501a 100644
--- a/Sema/SemaStmt.cpp
+++ b/Sema/SemaStmt.cpp
@@ -617,12 +617,9 @@
          RetValExp->getSourceRange());
     break;
   case PointerFromInt:
-    // check for null pointer constant (C99 6.3.2.3p3)
-    if (!RetValExp->isNullPointerConstant(Context)) {
-      Diag(ReturnLoc, diag::ext_typecheck_return_pointer_int,
-           lhsType.getAsString(), rhsType.getAsString(),
-           RetValExp->getSourceRange());
-    }
+    Diag(ReturnLoc, diag::ext_typecheck_return_pointer_int,
+         lhsType.getAsString(), rhsType.getAsString(),
+         RetValExp->getSourceRange());
     break;
   case IntFromPointer:
     Diag(ReturnLoc, diag::ext_typecheck_return_pointer_int,
diff --git a/test/Sema/assign-null.c b/test/Sema/assign-null.c
new file mode 100644
index 0000000..6972d90
--- /dev/null
+++ b/test/Sema/assign-null.c
@@ -0,0 +1,10 @@
+// RUN: clang -fsyntax-only -verify %s
+
+#include <stddef.h>
+
+typedef void (*hookfunc)(void *arg);
+hookfunc hook;
+
+void clear_hook() {
+  hook = NULL;
+}
