[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:
Argyrios Kyrtzidis 2012-10-02 16:10:41 +00:00
parent 472eda06b0
commit b36ee5c592
2 changed files with 20 additions and 6 deletions

View File

@ -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;

View File

@ -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(),