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
