Sink the BuiltinInfo object from ASTContext into the
preprocessor and initialize it early in clang-cc. This
ensures that __has_builtin works in all modes, not just
when ASTContext is around.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@73319 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/clang-cc/clang-cc.cpp b/tools/clang-cc/clang-cc.cpp
index c58340c..840f015 100644
--- a/tools/clang-cc/clang-cc.cpp
+++ b/tools/clang-cc/clang-cc.cpp
@@ -2002,9 +2002,10 @@
PP.getTargetInfo(),
PP.getIdentifierTable(),
PP.getSelectorTable(),
+ PP.getBuiltinInfo(),
/* FreeMemory = */ !DisableFree,
- /* size_reserve = */0,
- /* InitializeBuiltins = */ImplicitIncludePCH.empty()));
+ /* size_reserve = */0));
+
llvm::OwningPtr<PCHReader> Reader;
llvm::OwningPtr<ExternalASTSource> Source;
@@ -2298,9 +2299,15 @@
PhonyDependencyTarget);
}
- if (ImplicitIncludePCH.empty() &&
- InitializeSourceManager(*PP.get(), InFile))
- continue;
+ if (ImplicitIncludePCH.empty()) {
+ if (InitializeSourceManager(*PP.get(), InFile))
+ continue;
+
+ // Initialize builtin info.
+ PP->getBuiltinInfo().InitializeBuiltins(PP->getIdentifierTable(),
+ PP->getTargetInfo(),
+ PP->getLangOptions().NoBuiltin);
+ }
if (!HTMLDiag.empty())
((PathDiagnosticClient*)DiagClient.get())->SetPreprocessor(PP.get());