Index: lib/AST/Expr.cpp
===================================================================
--- lib/AST/Expr.cpp	(revision 189362)
+++ lib/AST/Expr.cpp	(working copy)
@@ -3107,7 +3107,7 @@
       (Ctx.getLangOpts().CPlusPlus && getType()->isEnumeralType()))
     return NPCK_NotNull;
 
-  if (Ctx.getLangOpts().CPlusPlus11) {
+  if (Ctx.getLangOpts().CPlusPlus11 && !Ctx.getLangOpts().MicrosoftMode) {
     // C++11 [conv.ptr]p1: A null pointer constant is an integer literal with
     // value zero or a prvalue of type std::nullptr_t.
     const IntegerLiteral *Lit = dyn_cast<IntegerLiteral>(this);
Index: test/SemaCXX/MicrosoftCompatibility.cpp
===================================================================
--- test/SemaCXX/MicrosoftCompatibility.cpp	(revision 189362)
+++ test/SemaCXX/MicrosoftCompatibility.cpp	(working copy)
@@ -178,3 +178,16 @@
     del((void*)a);  // expected-note {{in instantiation of function template specialization}}
   }
 }
+
+namespace NullPtrFromICE {
+  struct Foo {
+    static const int ZERO = 0;
+    typedef void (Foo::*MemberFcnPtr)();
+  };
+  
+  struct Bar {
+    const Foo::MemberFcnPtr pB;
+  };
+  
+  Bar g_bar = { (Foo::MemberFcnPtr)Foo::ZERO };
+}
