diff --git a/clang/include/clang/Lex/HeaderSearchOptions.h b/clang/include/clang/Lex/HeaderSearchOptions.h index 114af14dec7f5a..fa2d0b502d72c1 100644 --- a/clang/include/clang/Lex/HeaderSearchOptions.h +++ b/clang/include/clang/Lex/HeaderSearchOptions.h @@ -247,6 +247,11 @@ class HeaderSearchOptions { LLVM_PREFERRED_TYPE(bool) unsigned ModulesSkipHeaderSearchPaths : 1; + /// Whether to entirely skip writing pragma diagnostic mappings. + /// Primarily used to speed up deserialization during dependency scanning. + LLVM_PREFERRED_TYPE(bool) + unsigned ModulesSkipPragmaDiagnosticMappings : 1; + LLVM_PREFERRED_TYPE(bool) unsigned ModulesHashContent : 1; @@ -270,7 +275,8 @@ class HeaderSearchOptions { ForceCheckCXX20ModulesInputFiles(false), UseDebugInfo(false), ModulesValidateDiagnosticOptions(true), ModulesSkipDiagnosticOptions(false), - ModulesSkipHeaderSearchPaths(false), ModulesHashContent(false), + ModulesSkipHeaderSearchPaths(false), + ModulesSkipPragmaDiagnosticMappings(false), ModulesHashContent(false), ModulesStrictContextHash(false) {} /// AddPath - Add the \p Path path to the specified \p Group list. diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index 1e86566d81fbc0..0161ad10f3f238 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -1261,8 +1261,8 @@ void ASTWriter::writeUnhashedControlBlock(Preprocessor &PP, Stream.EmitRecord(HEADER_SEARCH_PATHS, Record); } - // Write out the diagnostic/pragma mappings. - WritePragmaDiagnosticMappings(Diags, /* isModule = */ WritingModule); + if (!HSOpts.ModulesSkipPragmaDiagnosticMappings) + WritePragmaDiagnosticMappings(Diags, /* isModule = */ WritingModule); // Header search entry usage. auto HSEntryUsage = PP.getHeaderSearchInfo().computeUserEntryUsage(); diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp index d1d3cc50cb25b8..c54e6d523800b6 100644 --- a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp +++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp @@ -255,6 +255,8 @@ class DependencyScanningAction : public tooling::ToolAction { ScanInstance.getHeaderSearchOpts().ModulesStrictContextHash = true; ScanInstance.getHeaderSearchOpts().ModulesSkipDiagnosticOptions = true; ScanInstance.getHeaderSearchOpts().ModulesSkipHeaderSearchPaths = true; + ScanInstance.getHeaderSearchOpts().ModulesSkipPragmaDiagnosticMappings = + true; // Avoid some checks and module map parsing when loading PCM files. ScanInstance.getPreprocessorOpts().ModulesCheckRelocated = false;