Basic plumbing for generating a precompiled preamble for an
ASTUnit/CXTranslationUnit. We can't actually use this preamble yet,
however.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@109202 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp
index 51965bb..c3095e7 100644
--- a/tools/libclang/CIndex.cpp
+++ b/tools/libclang/CIndex.cpp
@@ -1176,6 +1176,11 @@
CIndexer *CXXIdx = static_cast<CIndexer *>(CIdx);
+ // The "editing" option implies other options.
+ if (options & CXTranslationUnit_Editing)
+ options |= CXTranslationUnit_PrecompiledPreamble;
+ bool PrecompilePreamble = options & CXTranslationUnit_PrecompiledPreamble;
+
// Configure the diagnostics.
DiagnosticOptions DiagOpts;
llvm::IntrusiveRefCntPtr<Diagnostic> Diags;
@@ -1210,10 +1215,12 @@
Args.insert(Args.end(), command_line_args,
command_line_args + num_command_line_args);
+ // Do we need the detailed preprocessing record?
if (options & CXTranslationUnit_DetailedPreprocessingRecord) {
Args.push_back("-Xclang");
Args.push_back("-detailed-preprocessing-record");
}
+
unsigned NumErrors = Diags->getNumErrors();
#ifdef USE_CRASHTRACER
@@ -1227,7 +1234,8 @@
CXXIdx->getOnlyLocalDecls(),
RemappedFiles.data(),
RemappedFiles.size(),
- /*CaptureDiagnostics=*/true));
+ /*CaptureDiagnostics=*/true,
+ PrecompilePreamble));
if (NumErrors != Diags->getNumErrors()) {
// Make sure to check that 'Unit' is non-NULL.
@@ -1317,9 +1325,12 @@
TemporaryFiles.push_back(DiagnosticsFile);
argv.push_back("-fdiagnostics-binary");
- argv.push_back("-Xclang");
- argv.push_back("-detailed-preprocessing-record");
-
+ // Do we need the detailed preprocessing record?
+ if (options & CXTranslationUnit_DetailedPreprocessingRecord) {
+ argv.push_back("-Xclang");
+ argv.push_back("-detailed-preprocessing-record");
+ }
+
// Add the null terminator.
argv.push_back(NULL);