llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: David Zbarsky (dzbarsky) <details> <summary>Changes</summary> Outline language-option mismatch diagnostic construction into two `noinline` helpers. Generated comparisons remain direct and ordered as before, so successful imports add no indirect calls and the serialized format is unchanged. Linked `clang` and `clangd` shrink by 35,264 and 29,216 bytes respectively; `ASTReader.cpp.o` shrinks by 62,712 bytes with 1,347 fewer relocations, while linked fixups are unchanged. PCH, PCM, and BMI outputs and mismatch diagnostics are byte-identical, focused module/PCH tests pass, and batched PCH and module imports show no significant performance change. Work towards #<!-- -->202616 AI tool disclosure: Co-authored with OpenAI Codex. --- Full diff: https://github.com/llvm/llvm-project/pull/202843.diff 1 Files Affected: - (modified) clang/lib/Serialization/ASTReader.cpp (+34-24) ``````````diff diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index f8a6a38bb9b5c..9e9dcc57976fa 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -276,6 +276,23 @@ void ChainedASTReaderListener::readModuleFileExtension( ASTReaderListener::~ASTReaderListener() = default; +static LLVM_ATTRIBUTE_NOINLINE void diagnoseLanguageOptionFlagMismatch( + DiagnosticsEngine *Diags, StringRef Description, bool SerializedValue, + bool CurrentValue, StringRef ModuleFilename) { + if (!Diags) + return; + Diags->Report(diag::err_ast_file_langopt_mismatch) + << Description << SerializedValue << CurrentValue << ModuleFilename; +} + +static LLVM_ATTRIBUTE_NOINLINE void diagnoseLanguageOptionValueMismatch( + DiagnosticsEngine *Diags, StringRef Description, StringRef ModuleFilename) { + if (!Diags) + return; + Diags->Report(diag::err_ast_file_langopt_value_mismatch) + << Description << ModuleFilename; +} + /// Compare the given set of language options against an existing set of /// language options. /// @@ -298,15 +315,13 @@ static bool checkLanguageOptions(const LangOptions &LangOpts, (CK::Compatibility == CK::Compatible && \ !AllowCompatibleDifferences)) { \ if (ExistingLangOpts.Name != LangOpts.Name) { \ - if (Diags) { \ - if (Bits == 1) \ - Diags->Report(diag::err_ast_file_langopt_mismatch) \ - << Description << LangOpts.Name << ExistingLangOpts.Name \ - << ModuleFilename; \ - else \ - Diags->Report(diag::err_ast_file_langopt_value_mismatch) \ - << Description << ModuleFilename; \ - } \ + if (Bits == 1) \ + diagnoseLanguageOptionFlagMismatch( \ + Diags, Description, LangOpts.Name, ExistingLangOpts.Name, \ + ModuleFilename); \ + else \ + diagnoseLanguageOptionValueMismatch(Diags, Description, \ + ModuleFilename); \ return true; \ } \ } \ @@ -318,9 +333,8 @@ static bool checkLanguageOptions(const LangOptions &LangOpts, (CK::Compatibility == CK::Compatible && \ !AllowCompatibleDifferences)) { \ if (ExistingLangOpts.Name != LangOpts.Name) { \ - if (Diags) \ - Diags->Report(diag::err_ast_file_langopt_value_mismatch) \ - << Description << ModuleFilename; \ + diagnoseLanguageOptionValueMismatch(Diags, Description, \ + ModuleFilename); \ return true; \ } \ } \ @@ -332,9 +346,8 @@ static bool checkLanguageOptions(const LangOptions &LangOpts, (CK::Compatibility == CK::Compatible && \ !AllowCompatibleDifferences)) { \ if (ExistingLangOpts.get##Name() != LangOpts.get##Name()) { \ - if (Diags) \ - Diags->Report(diag::err_ast_file_langopt_value_mismatch) \ - << Description << ModuleFilename; \ + diagnoseLanguageOptionValueMismatch(Diags, Description, \ + ModuleFilename); \ return true; \ } \ } \ @@ -343,24 +356,21 @@ static bool checkLanguageOptions(const LangOptions &LangOpts, #include "clang/Basic/LangOptions.def" if (ExistingLangOpts.ModuleFeatures != LangOpts.ModuleFeatures) { - if (Diags) - Diags->Report(diag::err_ast_file_langopt_value_mismatch) - << "module features" << ModuleFilename; + diagnoseLanguageOptionValueMismatch(Diags, "module features", + ModuleFilename); return true; } if (ExistingLangOpts.ObjCRuntime != LangOpts.ObjCRuntime) { - if (Diags) - Diags->Report(diag::err_ast_file_langopt_value_mismatch) - << "target Objective-C runtime" << ModuleFilename; + diagnoseLanguageOptionValueMismatch(Diags, "target Objective-C runtime", + ModuleFilename); return true; } if (ExistingLangOpts.CommentOpts.BlockCommandNames != LangOpts.CommentOpts.BlockCommandNames) { - if (Diags) - Diags->Report(diag::err_ast_file_langopt_value_mismatch) - << "block command names" << ModuleFilename; + diagnoseLanguageOptionValueMismatch(Diags, "block command names", + ModuleFilename); return true; } `````````` </details> https://github.com/llvm/llvm-project/pull/202843 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
