https://github.com/aviralg updated 
https://github.com/llvm/llvm-project/pull/177719

>From 6e544d741d5098fbe94e5133fc62abc41f80c15a Mon Sep 17 00:00:00 2001
From: Aviral Goel <[email protected]>
Date: Fri, 23 Jan 2026 17:03:23 -0800
Subject: [PATCH 1/5] [SSAF] Add SerializationFormat Interface

---
 .../Serialization/SerializationFormat.h       | 65 +++++++++++++++++++
 1 file changed, 65 insertions(+)
 create mode 100644 
clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h

diff --git 
a/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h 
b/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h
new file mode 100644
index 0000000000000..aec84e9e0cd74
--- /dev/null
+++ b/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h
@@ -0,0 +1,65 @@
+//===- SerializationFormat.h ------------------------------------*- C++ 
-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Abstract SerializationFormat interface for reading and writing
+// TUSummary and LinkUnitResolution data.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef CLANG_ANALYSIS_SCALABLE_SERIALIZATION_SERIALIZATION_FORMAT_H
+#define CLANG_ANALYSIS_SCALABLE_SERIALIZATION_SERIALIZATION_FORMAT_H
+
+#include "clang/Analysis/Scalable/Model/BuildNamespace.h"
+#include "llvm/ADT/SmallString.h"
+#include "llvm/ADT/StringRef.h"
+#include <string>
+#include <vector>
+
+namespace clang {
+namespace ssaf {
+
+class TUSummary;
+class EntityIdTable;
+class EntityName;
+class EntityId;
+class TUSummaryData;
+
+/// Abstract base class for serialization formats.
+class SerializationFormat {
+protected:
+  // Helpers providing access to implementation details of basic data 
structures
+  // for efficient serialization/deserialization.
+  static EntityIdTable &getIdTableForDeserialization(TUSummary &S);
+  static NestedBuildNamespace &
+  getCommonNamespaceForDeserialization(TUSummary &S);
+  static const EntityIdTable &getIdTable(const TUSummary &S);
+  static const NestedBuildNamespace &getCommonNamespace(const TUSummary &S);
+
+  static BuildNamespaceKind getBuildNamespaceKind(const BuildNamespace &BN);
+  static const std::string &getBuildNamespaceName(const BuildNamespace &BN);
+  static const std::vector<BuildNamespace> &
+  getNestedBuildNamespaces(const NestedBuildNamespace &NBN);
+
+  static const std::string &getEntityNameUSR(const EntityName &EN);
+  static const llvm::SmallString<16> &getEntityNameSuffix(const EntityName 
&EN);
+  static const NestedBuildNamespace &
+  getEntityNameNamespace(const EntityName &EN);
+
+public:
+  virtual ~SerializationFormat() = default;
+
+  virtual TUSummary readTUSummary(const std::string &Path) = 0;
+
+  virtual void writeTUSummary(const TUSummary &Summary,
+                              llvm::StringRef OutputDir) = 0;
+};
+
+} // namespace ssaf
+} // namespace clang
+
+#endif // CLANG_ANALYSIS_SCALABLE_SERIALIZATION_SERIALIZATION_FORMAT_H

>From 5dab5b2ac11c653cfce7252702622dde7ad92942 Mon Sep 17 00:00:00 2001
From: Aviral Goel <[email protected]>
Date: Mon, 26 Jan 2026 11:33:18 -0800
Subject: [PATCH 2/5] Use nested namespace and use llvm::StringRef instead of
 std::string

---
 .../Scalable/Serialization/SerializationFormat.h    | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git 
a/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h 
b/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h
index aec84e9e0cd74..3a6b044ca97fd 100644
--- a/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h
+++ b/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h
@@ -17,11 +17,9 @@
 #include "clang/Analysis/Scalable/Model/BuildNamespace.h"
 #include "llvm/ADT/SmallString.h"
 #include "llvm/ADT/StringRef.h"
-#include <string>
 #include <vector>
 
-namespace clang {
-namespace ssaf {
+namespace clang::ssaf {
 
 class TUSummary;
 class EntityIdTable;
@@ -41,11 +39,11 @@ class SerializationFormat {
   static const NestedBuildNamespace &getCommonNamespace(const TUSummary &S);
 
   static BuildNamespaceKind getBuildNamespaceKind(const BuildNamespace &BN);
-  static const std::string &getBuildNamespaceName(const BuildNamespace &BN);
+  static llvm::StringRef getBuildNamespaceName(const BuildNamespace &BN);
   static const std::vector<BuildNamespace> &
   getNestedBuildNamespaces(const NestedBuildNamespace &NBN);
 
-  static const std::string &getEntityNameUSR(const EntityName &EN);
+  static llvm::StringRef getEntityNameUSR(const EntityName &EN);
   static const llvm::SmallString<16> &getEntityNameSuffix(const EntityName 
&EN);
   static const NestedBuildNamespace &
   getEntityNameNamespace(const EntityName &EN);
@@ -53,13 +51,12 @@ class SerializationFormat {
 public:
   virtual ~SerializationFormat() = default;
 
-  virtual TUSummary readTUSummary(const std::string &Path) = 0;
+  virtual TUSummary readTUSummary(llvm::StringRef Path) = 0;
 
   virtual void writeTUSummary(const TUSummary &Summary,
                               llvm::StringRef OutputDir) = 0;
 };
 
-} // namespace ssaf
-} // namespace clang
+} // namespace clang::ssaf
 
 #endif // CLANG_ANALYSIS_SCALABLE_SERIALIZATION_SERIALIZATION_FORMAT_H

>From 1b9e4d9f05c01dc2f2d2274559dcda9d00146876 Mon Sep 17 00:00:00 2001
From: Aviral Goel <[email protected]>
Date: Tue, 27 Jan 2026 09:42:50 -0800
Subject: [PATCH 3/5] Reorder forward class declarations to be in alphabetical
 order

---
 .../Analysis/Scalable/Serialization/SerializationFormat.h     | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git 
a/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h 
b/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h
index 3a6b044ca97fd..a78a780634754 100644
--- a/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h
+++ b/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h
@@ -21,10 +21,10 @@
 
 namespace clang::ssaf {
 
-class TUSummary;
+class EntityId;
 class EntityIdTable;
 class EntityName;
-class EntityId;
+class TUSummary;
 class TUSummaryData;
 
 /// Abstract base class for serialization formats.

>From 9fb62be9bef147e3c1052c8f987bf770bcd69eb3 Mon Sep 17 00:00:00 2001
From: Aviral Goel <[email protected]>
Date: Tue, 27 Jan 2026 12:57:10 -0800
Subject: [PATCH 4/5] Add definitions for protected static methods

---
 .../Serialization/SerializationFormat.h       |  5 +-
 .../Analysis/Scalable/TUSummary/TUSummary.h   |  2 +
 clang/lib/Analysis/Scalable/CMakeLists.txt    |  1 +
 .../Serialization/SerializationFormat.cpp     | 61 +++++++++++++++++++
 4 files changed, 66 insertions(+), 3 deletions(-)
 create mode 100644 
clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp

diff --git 
a/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h 
b/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h
index a78a780634754..a53a315f461df 100644
--- a/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h
+++ b/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h
@@ -33,10 +33,9 @@ class SerializationFormat {
   // Helpers providing access to implementation details of basic data 
structures
   // for efficient serialization/deserialization.
   static EntityIdTable &getIdTableForDeserialization(TUSummary &S);
-  static NestedBuildNamespace &
-  getCommonNamespaceForDeserialization(TUSummary &S);
+  static BuildNamespace &getTUNamespaceForDeserialization(TUSummary &S);
   static const EntityIdTable &getIdTable(const TUSummary &S);
-  static const NestedBuildNamespace &getCommonNamespace(const TUSummary &S);
+  static const BuildNamespace &getTUNamespace(const TUSummary &S);
 
   static BuildNamespaceKind getBuildNamespaceKind(const BuildNamespace &BN);
   static llvm::StringRef getBuildNamespaceName(const BuildNamespace &BN);
diff --git a/clang/include/clang/Analysis/Scalable/TUSummary/TUSummary.h 
b/clang/include/clang/Analysis/Scalable/TUSummary/TUSummary.h
index 928d285fa764e..4af1c70e1a488 100644
--- a/clang/include/clang/Analysis/Scalable/TUSummary/TUSummary.h
+++ b/clang/include/clang/Analysis/Scalable/TUSummary/TUSummary.h
@@ -30,6 +30,8 @@ class TUSummary {
 
 public:
   TUSummary(BuildNamespace TUNamespace) : TUNamespace(std::move(TUNamespace)) 
{}
+
+  friend class SerializationFormat;
 };
 
 } // namespace clang::ssaf
diff --git a/clang/lib/Analysis/Scalable/CMakeLists.txt 
b/clang/lib/Analysis/Scalable/CMakeLists.txt
index 566edca552388..36365b1fb87e1 100644
--- a/clang/lib/Analysis/Scalable/CMakeLists.txt
+++ b/clang/lib/Analysis/Scalable/CMakeLists.txt
@@ -7,6 +7,7 @@ add_clang_library(clangAnalysisScalable
   Model/BuildNamespace.cpp
   Model/EntityIdTable.cpp
   Model/EntityName.cpp
+  Serialization/SerializationFormat.cpp
   TUSummary/ExtractorRegistry.cpp
 
   LINK_LIBS
diff --git a/clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp 
b/clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp
new file mode 100644
index 0000000000000..ee155d22afa9b
--- /dev/null
+++ b/clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp
@@ -0,0 +1,61 @@
+//===- SerializationFormat.cpp ----------------------------------*- C++ 
-*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "clang/Analysis/Scalable/Serialization/SerializationFormat.h"
+#include "clang/Analysis/Scalable/Model/BuildNamespace.h"
+#include "clang/Analysis/Scalable/Model/EntityId.h"
+#include "clang/Analysis/Scalable/Model/EntityName.h"
+#include "clang/Analysis/Scalable/TUSummary/TUSummary.h"
+
+using namespace clang::ssaf;
+
+EntityIdTable &SerializationFormat::getIdTableForDeserialization(TUSummary &S) 
{
+  return S.IdTable;
+}
+
+BuildNamespace &
+SerializationFormat::getTUNamespaceForDeserialization(TUSummary &S) {
+  return S.TUNamespace;
+}
+
+const EntityIdTable &SerializationFormat::getIdTable(const TUSummary &S) {
+  return S.IdTable;
+}
+
+const BuildNamespace &SerializationFormat::getTUNamespace(const TUSummary &S) {
+  return S.TUNamespace;
+}
+
+BuildNamespaceKind
+SerializationFormat::getBuildNamespaceKind(const BuildNamespace &BN) {
+  return BN.Kind;
+}
+
+llvm::StringRef
+SerializationFormat::getBuildNamespaceName(const BuildNamespace &BN) {
+  return BN.Name;
+}
+
+const std::vector<BuildNamespace> &
+SerializationFormat::getNestedBuildNamespaces(const NestedBuildNamespace &NBN) 
{
+  return NBN.Namespaces;
+}
+
+llvm::StringRef SerializationFormat::getEntityNameUSR(const EntityName &EN) {
+  return EN.USR;
+}
+
+const llvm::SmallString<16> &
+SerializationFormat::getEntityNameSuffix(const EntityName &EN) {
+  return EN.Suffix;
+}
+
+const NestedBuildNamespace &
+SerializationFormat::getEntityNameNamespace(const EntityName &EN) {
+  return EN.Namespace;
+}

>From c93430657298a6ac87ac51be6bd310cc652aa52d Mon Sep 17 00:00:00 2001
From: Aviral Goel <[email protected]>
Date: Wed, 28 Jan 2026 09:21:20 -0800
Subject: [PATCH 5/5] Replace const and non-const static methods with templated
 methods

---
 .../Serialization/SerializationFormat.h       | 30 ++++-----
 clang/lib/Analysis/Scalable/CMakeLists.txt    |  1 -
 .../Serialization/SerializationFormat.cpp     | 61 -------------------
 3 files changed, 16 insertions(+), 76 deletions(-)
 delete mode 100644 
clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp

diff --git 
a/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h 
b/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h
index a53a315f461df..30d728239e5c3 100644
--- a/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h
+++ b/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h
@@ -32,20 +32,22 @@ class SerializationFormat {
 protected:
   // Helpers providing access to implementation details of basic data 
structures
   // for efficient serialization/deserialization.
-  static EntityIdTable &getIdTableForDeserialization(TUSummary &S);
-  static BuildNamespace &getTUNamespaceForDeserialization(TUSummary &S);
-  static const EntityIdTable &getIdTable(const TUSummary &S);
-  static const BuildNamespace &getTUNamespace(const TUSummary &S);
-
-  static BuildNamespaceKind getBuildNamespaceKind(const BuildNamespace &BN);
-  static llvm::StringRef getBuildNamespaceName(const BuildNamespace &BN);
-  static const std::vector<BuildNamespace> &
-  getNestedBuildNamespaces(const NestedBuildNamespace &NBN);
-
-  static llvm::StringRef getEntityNameUSR(const EntityName &EN);
-  static const llvm::SmallString<16> &getEntityNameSuffix(const EntityName 
&EN);
-  static const NestedBuildNamespace &
-  getEntityNameNamespace(const EntityName &EN);
+
+  // Accessors for TUSummary:
+  template <class T> static auto &IdTableOf(T &X) { return X.IdTable; }
+  template <class T> static auto &TUNamespaceOf(T &X) { return X.TUNamespace; }
+
+  // Accessors for BuildNamespace:
+  template <class T> static auto &KindOf(T &X) { return X.Kind; }
+  template <class T> static auto &NameOf(T &X) { return X.Name; }
+
+  // Accessors for NestedBuildNamespace:
+  template <class T> static auto &NamespacesOf(T &X) { return X.Namespaces; }
+
+  // Accessors for EntityName:
+  template <class T> static auto &USROf(T &X) { return X.USR; }
+  template <class T> static auto &SuffixOf(T &X) { return X.Suffix; }
+  template <class T> static auto &NamespaceOf(T &X) { return X.Namespace; }
 
 public:
   virtual ~SerializationFormat() = default;
diff --git a/clang/lib/Analysis/Scalable/CMakeLists.txt 
b/clang/lib/Analysis/Scalable/CMakeLists.txt
index 36365b1fb87e1..566edca552388 100644
--- a/clang/lib/Analysis/Scalable/CMakeLists.txt
+++ b/clang/lib/Analysis/Scalable/CMakeLists.txt
@@ -7,7 +7,6 @@ add_clang_library(clangAnalysisScalable
   Model/BuildNamespace.cpp
   Model/EntityIdTable.cpp
   Model/EntityName.cpp
-  Serialization/SerializationFormat.cpp
   TUSummary/ExtractorRegistry.cpp
 
   LINK_LIBS
diff --git a/clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp 
b/clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp
deleted file mode 100644
index ee155d22afa9b..0000000000000
--- a/clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-//===- SerializationFormat.cpp ----------------------------------*- C++ 
-*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "clang/Analysis/Scalable/Serialization/SerializationFormat.h"
-#include "clang/Analysis/Scalable/Model/BuildNamespace.h"
-#include "clang/Analysis/Scalable/Model/EntityId.h"
-#include "clang/Analysis/Scalable/Model/EntityName.h"
-#include "clang/Analysis/Scalable/TUSummary/TUSummary.h"
-
-using namespace clang::ssaf;
-
-EntityIdTable &SerializationFormat::getIdTableForDeserialization(TUSummary &S) 
{
-  return S.IdTable;
-}
-
-BuildNamespace &
-SerializationFormat::getTUNamespaceForDeserialization(TUSummary &S) {
-  return S.TUNamespace;
-}
-
-const EntityIdTable &SerializationFormat::getIdTable(const TUSummary &S) {
-  return S.IdTable;
-}
-
-const BuildNamespace &SerializationFormat::getTUNamespace(const TUSummary &S) {
-  return S.TUNamespace;
-}
-
-BuildNamespaceKind
-SerializationFormat::getBuildNamespaceKind(const BuildNamespace &BN) {
-  return BN.Kind;
-}
-
-llvm::StringRef
-SerializationFormat::getBuildNamespaceName(const BuildNamespace &BN) {
-  return BN.Name;
-}
-
-const std::vector<BuildNamespace> &
-SerializationFormat::getNestedBuildNamespaces(const NestedBuildNamespace &NBN) 
{
-  return NBN.Namespaces;
-}
-
-llvm::StringRef SerializationFormat::getEntityNameUSR(const EntityName &EN) {
-  return EN.USR;
-}
-
-const llvm::SmallString<16> &
-SerializationFormat::getEntityNameSuffix(const EntityName &EN) {
-  return EN.Suffix;
-}
-
-const NestedBuildNamespace &
-SerializationFormat::getEntityNameNamespace(const EntityName &EN) {
-  return EN.Namespace;
-}

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to