https://github.com/davemgreen created 
https://github.com/llvm/llvm-project/pull/141841

This is a fix for a completely unrelated patch, that started to cause failures 
in the explicit-build.cpp test because the size of the b.pcm and b-not-a.pcm 
files became the same. The alignment added by empty ObjCCategory blobs being 
written to the file causes them to become the same size, and the error 'module 
file has a different size than expected' will not be emitted as the pcms only 
track module size, not content, for whether they are valid.

This prevents that issue by not saving the ObjCCategories if it is empty. The 
change in clang/lib/Serialization/ASTReaderDecl.cpp is just a format, but shows 
that the only use of ObjCCategoriesMap loaded from the file will be OK with 
null (never loaded) data. It is a bit of a weird fix, but should help decrease 
the size of the modules for objects that are not used.

>From 8e7522b0bd5c60a1b3e761ef5d7e7db202290373 Mon Sep 17 00:00:00 2001
From: David Green <david.gr...@arm.com>
Date: Wed, 28 May 2025 20:39:53 +0100
Subject: [PATCH] [ASTWriter] Do not write ObjCCategories if empty.

This is a fix for a completely unrelated patch, that started to fail the
explicit-build.cpp test because the size of the b.pcm and b-not-a.pcm files
became the same. The alignment added by empty ObjCCategory blobs being written
to the file causes them to be the same size, and the error 'module file has a
different size than expected' will not be emitted.

This prevents that issue by not saving the ObjCCategories if it is empty. The
change in clang/lib/Serialization/ASTReaderDecl.cpp is just a format, but shows
that the only use of ObjCCategoriesMap loaded from the file will be OK with
null (never loaded) data.
---
 clang/lib/Serialization/ASTReaderDecl.cpp | 9 ++++-----
 clang/lib/Serialization/ASTWriter.cpp     | 3 +++
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp 
b/clang/lib/Serialization/ASTReaderDecl.cpp
index e84932c765663..237b8b9d6ef6a 100644
--- a/clang/lib/Serialization/ASTReaderDecl.cpp
+++ b/clang/lib/Serialization/ASTReaderDecl.cpp
@@ -4634,11 +4634,10 @@ namespace {
 
       // Perform a binary search to find the local redeclarations for this
       // declaration (if any).
-      const ObjCCategoriesInfo Compare = { LocalID, 0 };
-      const ObjCCategoriesInfo *Result
-        = std::lower_bound(M.ObjCCategoriesMap,
-                           M.ObjCCategoriesMap + M.LocalNumObjCCategoriesInMap,
-                           Compare);
+      const ObjCCategoriesInfo Compare = {LocalID, 0};
+      const ObjCCategoriesInfo *Result = std::lower_bound(
+          M.ObjCCategoriesMap,
+          M.ObjCCategoriesMap + M.LocalNumObjCCategoriesInMap, Compare);
       if (Result == M.ObjCCategoriesMap + M.LocalNumObjCCategoriesInMap ||
           LocalID != Result->getDefinitionID()) {
         // We didn't find anything. If the class definition is in this module
diff --git a/clang/lib/Serialization/ASTWriter.cpp 
b/clang/lib/Serialization/ASTWriter.cpp
index cc9916a75d4b4..a92e9c37f6a7c 100644
--- a/clang/lib/Serialization/ASTWriter.cpp
+++ b/clang/lib/Serialization/ASTWriter.cpp
@@ -4978,6 +4978,9 @@ void ASTWriter::WriteCUDAPragmas(Sema &SemaRef) {
 }
 
 void ASTWriter::WriteObjCCategories() {
+  if (ObjCClassesWithCategories.empty())
+    return;
+
   SmallVector<ObjCCategoriesInfo, 2> CategoriesMap;
   RecordData Categories;
 

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to