Author: Chuanqi Xu Date: 2022-11-18T11:11:17+08:00 New Revision: d5844685810980399397a4310b943532361790ef
URL: https://github.com/llvm/llvm-project/commit/d5844685810980399397a4310b943532361790ef DIFF: https://github.com/llvm/llvm-project/commit/d5844685810980399397a4310b943532361790ef.diff LOG: [C++20] [Modules] Don't emit macro definitions with named module It is meaningless to emit macro definitions for named modules. With some small experiments, the size of the module for the named modules reduced 2%~4% after this patch. Added: Modified: clang/lib/Serialization/ASTWriter.cpp clang/test/Modules/cxx20-module-file-info-macros.cpp Removed: ################################################################################ diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index 95ed51a90c18..e944d2e2a2d1 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -2318,11 +2318,14 @@ void ASTWriter::WritePreprocessor(const Preprocessor &PP, bool IsModule) { // Construct the list of identifiers with macro directives that need to be // serialized. SmallVector<const IdentifierInfo *, 128> MacroIdentifiers; - for (auto &Id : PP.getIdentifierTable()) - if (Id.second->hadMacroDefinition() && - (!Id.second->isFromAST() || - Id.second->hasChangedSinceDeserialization())) - MacroIdentifiers.push_back(Id.second); + // It is meaningless to emit macros for named modules. It only wastes times + // and spaces. + if (!isWritingStdCXXNamedModules()) + for (auto &Id : PP.getIdentifierTable()) + if (Id.second->hadMacroDefinition() && + (!Id.second->isFromAST() || + Id.second->hasChangedSinceDeserialization())) + MacroIdentifiers.push_back(Id.second); // Sort the set of macro definitions that need to be serialized by the // name of the macro, to provide a stable ordering. llvm::sort(MacroIdentifiers, llvm::deref<std::less<>>()); diff --git a/clang/test/Modules/cxx20-module-file-info-macros.cpp b/clang/test/Modules/cxx20-module-file-info-macros.cpp index 422589702948..bc7df1c9f50b 100644 --- a/clang/test/Modules/cxx20-module-file-info-macros.cpp +++ b/clang/test/Modules/cxx20-module-file-info-macros.cpp @@ -62,13 +62,4 @@ module; #include "foo.h" export module M; #define M_Module 43 -// FIXME: It is meaningless for named modules to emit macro definitions. -// It wastes the time and spaces completely. -// CHECK: Macro Definitions: -// CHECK-DAG: M_Module -// CHECK-DAG: REDEFINE -// CHECK-DAG: FUNC_Macro -// CHECK-DAG: TO_BE_UNDEF -// CHECK-DAG: FOO -// CHECK-DAG: CONSTANT -// CHECK-NEXT: === +// CHECK-NOT: Macro Definitions: _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits