forked from OSchip/llvm-project
[libclang] Even though we disable the preprocessing record during indexing,
make sure that it gets enabled for when a module needs to be created. llvm-svn: 165021
This commit is contained in:
parent
472eda06b0
commit
b36ee5c592
|
@ -2552,7 +2552,8 @@ static int index_file(int argc, const char **argv) {
|
||||||
idxAction = clang_IndexAction_create(Idx);
|
idxAction = clang_IndexAction_create(Idx);
|
||||||
result = clang_indexSourceFile(idxAction, &index_data,
|
result = clang_indexSourceFile(idxAction, &index_data,
|
||||||
&IndexCB,sizeof(IndexCB), index_opts,
|
&IndexCB,sizeof(IndexCB), index_opts,
|
||||||
0, argv, argc, 0, 0, 0, 0);
|
0, argv, argc, 0, 0, 0,
|
||||||
|
getDefaultParsingOptions());
|
||||||
if (index_data.fail_for_error)
|
if (index_data.fail_for_error)
|
||||||
result = -1;
|
result = -1;
|
||||||
|
|
||||||
|
|
|
@ -192,10 +192,20 @@ public:
|
||||||
unsigned indexOptions,
|
unsigned indexOptions,
|
||||||
CXTranslationUnit cxTU)
|
CXTranslationUnit cxTU)
|
||||||
: IndexCtx(clientData, indexCallbacks, indexOptions, cxTU),
|
: IndexCtx(clientData, indexCallbacks, indexOptions, cxTU),
|
||||||
CXTU(cxTU) { }
|
CXTU(cxTU), EnablePPDetailedRecordForModules(false) { }
|
||||||
|
|
||||||
|
bool EnablePPDetailedRecordForModules;
|
||||||
|
|
||||||
virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
|
virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
|
||||||
StringRef InFile) {
|
StringRef InFile) {
|
||||||
|
// We usually disable the preprocessing record for indexing even if the
|
||||||
|
// original preprocessing options had it enabled. Now that the indexing
|
||||||
|
// Preprocessor has been created (without a preprocessing record), re-enable
|
||||||
|
// the option in case modules are enabled, so that the detailed record
|
||||||
|
// option can be propagated when the module file is generated.
|
||||||
|
if (CI.getLangOpts().Modules && EnablePPDetailedRecordForModules)
|
||||||
|
CI.getPreprocessorOpts().DetailedRecord = true;
|
||||||
|
|
||||||
IndexCtx.setASTContext(CI.getASTContext());
|
IndexCtx.setASTContext(CI.getASTContext());
|
||||||
Preprocessor &PP = CI.getPreprocessor();
|
Preprocessor &PP = CI.getPreprocessor();
|
||||||
PP.addPPCallbacks(new IndexPPCallbacks(PP, IndexCtx));
|
PP.addPPCallbacks(new IndexPPCallbacks(PP, IndexCtx));
|
||||||
|
@ -353,9 +363,6 @@ static void clang_indexSourceFile_Impl(void *UserData) {
|
||||||
// precompiled headers are involved), we disable it.
|
// precompiled headers are involved), we disable it.
|
||||||
CInvok->getLangOpts()->SpellChecking = false;
|
CInvok->getLangOpts()->SpellChecking = false;
|
||||||
|
|
||||||
if (!requestedToGetTU)
|
|
||||||
CInvok->getPreprocessorOpts().DetailedRecord = false;
|
|
||||||
|
|
||||||
if (index_options & CXIndexOpt_SuppressWarnings)
|
if (index_options & CXIndexOpt_SuppressWarnings)
|
||||||
CInvok->getDiagnosticOpts().IgnoreWarnings = true;
|
CInvok->getDiagnosticOpts().IgnoreWarnings = true;
|
||||||
|
|
||||||
|
@ -381,7 +388,6 @@ static void clang_indexSourceFile_Impl(void *UserData) {
|
||||||
bool PrecompilePreamble = false;
|
bool PrecompilePreamble = false;
|
||||||
bool CacheCodeCompletionResults = false;
|
bool CacheCodeCompletionResults = false;
|
||||||
PreprocessorOptions &PPOpts = CInvok->getPreprocessorOpts();
|
PreprocessorOptions &PPOpts = CInvok->getPreprocessorOpts();
|
||||||
PPOpts.DetailedRecord = false;
|
|
||||||
PPOpts.AllowPCHWithCompilerErrors = true;
|
PPOpts.AllowPCHWithCompilerErrors = true;
|
||||||
|
|
||||||
if (requestedToGetTU) {
|
if (requestedToGetTU) {
|
||||||
|
@ -395,6 +401,13 @@ static void clang_indexSourceFile_Impl(void *UserData) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IndexAction->EnablePPDetailedRecordForModules
|
||||||
|
= PPOpts.DetailedRecord ||
|
||||||
|
(TU_options & CXTranslationUnit_DetailedPreprocessingRecord);
|
||||||
|
|
||||||
|
if (!requestedToGetTU)
|
||||||
|
PPOpts.DetailedRecord = false;
|
||||||
|
|
||||||
DiagnosticErrorTrap DiagTrap(*Diags);
|
DiagnosticErrorTrap DiagTrap(*Diags);
|
||||||
bool Success = ASTUnit::LoadFromCompilerInvocationAction(CInvok.getPtr(), Diags,
|
bool Success = ASTUnit::LoadFromCompilerInvocationAction(CInvok.getPtr(), Diags,
|
||||||
IndexAction.get(),
|
IndexAction.get(),
|
||||||
|
|
Loading…
Reference in New Issue