Index: test/SemaCXX/ms-typeinfo.cpp
===================================================================
--- test/SemaCXX/ms-typeinfo.cpp	(revision 0)
+++ test/SemaCXX/ms-typeinfo.cpp	(revision 0)
@@ -0,0 +1,9 @@
+// RUN: %clang_cc1 %s -fsyntax-only -verify -fms-compatibility
+
+namespace std {}
+
+class type_info {};
+
+void f() {
+  (void)typeid(int);
+}
Index: lib/Sema/SemaExprCXX.cpp
===================================================================
--- lib/Sema/SemaExprCXX.cpp	(revision 155478)
+++ lib/Sema/SemaExprCXX.cpp	(working copy)
@@ -375,6 +375,10 @@
     LookupResult R(*this, TypeInfoII, SourceLocation(), LookupTagName);
     LookupQualifiedName(R, getStdNamespace());
     CXXTypeInfoDecl = R.getAsSingle<RecordDecl>();
+    if (!CXXTypeInfoDecl && LangOpts.MicrosoftMode) {
+      LookupQualifiedName(R, Context.getTranslationUnitDecl());
+      CXXTypeInfoDecl = R.getAsSingle<RecordDecl>();
+    }
     if (!CXXTypeInfoDecl)
       return ExprError(Diag(OpLoc, diag::err_need_header_before_typeid));
   }
