diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp index c7d25509e595..e475a9ed5ec0 100644 --- a/clang/lib/Frontend/InitPreprocessor.cpp +++ b/clang/lib/Frontend/InitPreprocessor.cpp @@ -518,7 +518,6 @@ static void InitializePredefinedMacros(const TargetInfo &TI, if (LangOpts.CPlusPlus) { // FIXME: Support Microsoft's __identifier extension in the lexer. Builder.append("#define __identifier(x) x"); - Builder.append("class type_info;"); } } diff --git a/clang/lib/Sema/Sema.cpp b/clang/lib/Sema/Sema.cpp index 9a00783da1e3..35fd86fd251f 100644 --- a/clang/lib/Sema/Sema.cpp +++ b/clang/lib/Sema/Sema.cpp @@ -178,6 +178,13 @@ void Sema::Initialize() { PushOnScopeChains(Context.getObjCProtocolDecl(), TUScope); } + // Initialize Microsoft "predefined C++ types". + if (PP.getLangOpts().MicrosoftExt && PP.getLangOpts().CPlusPlus) { + if (IdResolver.begin(&Context.Idents.get("type_info")) == IdResolver.end()) + PushOnScopeChains(Context.buildImplicitRecord("type_info", TTK_Class), + TUScope); + } + // Initialize predefined OpenCL types. if (PP.getLangOpts().OpenCL) { addImplicitTypedef("image1d_t", Context.OCLImage1dTy);