From b36ee5c59284a6f0b85a42c084f2019c431bb340 Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Tue, 2 Oct 2012 16:10:41 +0000 Subject: [PATCH] [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 --- clang/tools/c-index-test/c-index-test.c | 3 ++- clang/tools/libclang/Indexing.cpp | 23 ++++++++++++++++++----- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/clang/tools/c-index-test/c-index-test.c b/clang/tools/c-index-test/c-index-test.c index 28ad59e..5b71e5c 100644 --- a/clang/tools/c-index-test/c-index-test.c +++ b/clang/tools/c-index-test/c-index-test.c @@ -2552,7 +2552,8 @@ static int index_file(int argc, const char **argv) { idxAction = clang_IndexAction_create(Idx); result = clang_indexSourceFile(idxAction, &index_data, &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) result = -1; diff --git a/clang/tools/libclang/Indexing.cpp b/clang/tools/libclang/Indexing.cpp index efae7ee..963e002 100644 --- a/clang/tools/libclang/Indexing.cpp +++ b/clang/tools/libclang/Indexing.cpp @@ -192,10 +192,20 @@ public: unsigned indexOptions, CXTranslationUnit cxTU) : IndexCtx(clientData, indexCallbacks, indexOptions, cxTU), - CXTU(cxTU) { } + CXTU(cxTU), EnablePPDetailedRecordForModules(false) { } + + bool EnablePPDetailedRecordForModules; virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI, 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()); Preprocessor &PP = CI.getPreprocessor(); PP.addPPCallbacks(new IndexPPCallbacks(PP, IndexCtx)); @@ -353,9 +363,6 @@ static void clang_indexSourceFile_Impl(void *UserData) { // precompiled headers are involved), we disable it. CInvok->getLangOpts()->SpellChecking = false; - if (!requestedToGetTU) - CInvok->getPreprocessorOpts().DetailedRecord = false; - if (index_options & CXIndexOpt_SuppressWarnings) CInvok->getDiagnosticOpts().IgnoreWarnings = true; @@ -381,7 +388,6 @@ static void clang_indexSourceFile_Impl(void *UserData) { bool PrecompilePreamble = false; bool CacheCodeCompletionResults = false; PreprocessorOptions &PPOpts = CInvok->getPreprocessorOpts(); - PPOpts.DetailedRecord = false; PPOpts.AllowPCHWithCompilerErrors = true; 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); bool Success = ASTUnit::LoadFromCompilerInvocationAction(CInvok.getPtr(), Diags, IndexAction.get(), -- 2.7.4