[clang] 7e34aae - [clang][ssaf][NFC] Refactor SerializationFormat to use macro-based field accessors (#180842)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Feb 11 03:22:16 PST 2026
Author: Balázs Benics
Date: 2026-02-11T11:22:11Z
New Revision: 7e34aaeb91cfd537f8510c94c51df31ecd310ba5
URL: https://github.com/llvm/llvm-project/commit/7e34aaeb91cfd537f8510c94c51df31ecd310ba5
DIFF: https://github.com/llvm/llvm-project/commit/7e34aaeb91cfd537f8510c94c51df31ecd310ba5.diff
LOG: [clang][ssaf][NFC] Refactor SerializationFormat to use macro-based field accessors (#180842)
This reduces code duplication and makes it easier to add new field
accessors.
Assisted-By: claude
Added:
clang/include/clang/Analysis/Scalable/Model/PrivateFieldNames.def
Modified:
clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h
clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp
clang/unittests/Analysis/Scalable/Registries/MockSerializationFormat.cpp
Removed:
################################################################################
diff --git a/clang/include/clang/Analysis/Scalable/Model/PrivateFieldNames.def b/clang/include/clang/Analysis/Scalable/Model/PrivateFieldNames.def
new file mode 100644
index 0000000000000..59064659996b4
--- /dev/null
+++ b/clang/include/clang/Analysis/Scalable/Model/PrivateFieldNames.def
@@ -0,0 +1,30 @@
+//===-- PrivateFieldNames.def -----------------------------------*- 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
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines a list of non-static data members of the SSAF objects.
+// These are used for granting access for:
+// - SerializationFormat
+// - TextFixture
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef FIELD
+#define FIELD(CLASS, FIELD_NAME)
+#endif
+
+FIELD(BuildNamespace, Kind)
+FIELD(BuildNamespace, Name)
+FIELD(EntityName, Namespace)
+FIELD(EntityName, Suffix)
+FIELD(EntityName, USR)
+FIELD(NestedBuildNamespace, Namespaces)
+FIELD(TUSummary, Data)
+FIELD(TUSummary, IdTable)
+FIELD(TUSummary, TUNamespace)
+
+#undef FIELD
diff --git a/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h b/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h
index c7438e2859da0..866fe8bfdcee0 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 "clang/Analysis/Scalable/Model/SummaryName.h"
#include "clang/Analysis/Scalable/TUSummary/TUSummary.h"
-#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/ExtensibleRTTI.h"
#include "llvm/Support/VirtualFileSystem.h"
-#include <vector>
namespace clang::ssaf {
@@ -33,26 +31,6 @@ class EntitySummary;
/// Abstract base class for serialization formats.
class SerializationFormat
: public llvm::RTTIExtends<SerializationFormat, llvm::RTTIRoot> {
-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);
- static decltype(TUSummary::Data) &getData(TUSummary &S);
- static const decltype(TUSummary::Data) &getData(const TUSummary &S);
-
public:
explicit SerializationFormat(
llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS);
@@ -66,6 +44,13 @@ class SerializationFormat
static char ID; // For RTTIExtends.
protected:
+ // Helpers providing access to implementation details of basic data structures
+ // for efficient serialization/deserialization.
+#define FIELD(CLASS, FIELD_NAME) \
+ static const auto &get##FIELD_NAME(const CLASS &X) { return X.FIELD_NAME; } \
+ static auto &get##FIELD_NAME(CLASS &X) { return X.FIELD_NAME; }
+#include "clang/Analysis/Scalable/Model/PrivateFieldNames.def"
+
llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS;
};
diff --git a/clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp b/clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp
index 1d62ea837616f..75ec263a1051f 100644
--- a/clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp
+++ b/clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp
@@ -7,70 +7,10 @@
//===----------------------------------------------------------------------===//
#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;
+char SerializationFormat::ID = 0;
SerializationFormat::SerializationFormat(
llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS)
: FS(FS) {}
-
-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;
-}
-
-const decltype(TUSummary::Data) &
-SerializationFormat::getData(const TUSummary &S) {
- return S.Data;
-}
-
-decltype(TUSummary::Data) &SerializationFormat::getData(TUSummary &S) {
- return S.Data;
-}
-
-char SerializationFormat::ID = 0;
diff --git a/clang/unittests/Analysis/Scalable/Registries/MockSerializationFormat.cpp b/clang/unittests/Analysis/Scalable/Registries/MockSerializationFormat.cpp
index 03328e8bd9742..127e61b26c0cb 100644
--- a/clang/unittests/Analysis/Scalable/Registries/MockSerializationFormat.cpp
+++ b/clang/unittests/Analysis/Scalable/Registries/MockSerializationFormat.cpp
@@ -67,7 +67,7 @@ TUSummary MockSerializationFormat::readTUSummary(llvm::StringRef Path) {
assert(InfoEntry.ForSummary == Name);
SpecialFileRepresentation Repr{(*InputFile)->getBuffer().str()};
- auto &Table = getIdTableForDeserialization(Summary);
+ auto &Table = getIdTable(Summary);
std::unique_ptr<EntitySummary> Result = InfoEntry.Deserialize(Repr, Table);
if (!Result) // TODO: Handle error.
More information about the cfe-commits
mailing list