From a1c4c1de051974a6fea4e9eda0f5df1c4fab462e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Benics?= Date: Thu, 12 Feb 2026 19:07:42 +0000 Subject: [PATCH] [clang][ssaf] Drop llvm-RTTI support for now (#181198) We discussed internally, and for now we will focus on an MVP and try to not complicate APIs unless that is strictly necessary. --- .../Scalable/Serialization/SerializationFormat.h | 6 +----- .../Analysis/Scalable/TUSummary/EntitySummary.h | 5 +---- clang/lib/Analysis/Scalable/CMakeLists.txt | 2 -- .../Scalable/Serialization/SerializationFormat.cpp | 13 ------------- .../Analysis/Scalable/TUSummary/EntitySummary.cpp | 11 ----------- .../Scalable/Registries/FancyAnalysisData.cpp | 7 ++----- .../Scalable/Registries/MockSerializationFormat.cpp | 5 +---- .../Scalable/Registries/MockSerializationFormat.h | 4 +--- 8 files changed, 6 insertions(+), 47 deletions(-) delete mode 100644 clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp delete mode 100644 clang/lib/Analysis/Scalable/TUSummary/EntitySummary.cpp diff --git a/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h b/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h index ee220b6be18a..78e4df0eb88f 100644 --- a/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h +++ b/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h @@ -18,7 +18,6 @@ #include "clang/Analysis/Scalable/Model/SummaryName.h" #include "clang/Analysis/Scalable/TUSummary/TUSummary.h" #include "llvm/ADT/StringRef.h" -#include "llvm/Support/ExtensibleRTTI.h" namespace clang::ssaf { @@ -28,8 +27,7 @@ class EntityName; class EntitySummary; /// Abstract base class for serialization formats. -class SerializationFormat - : public llvm::RTTIExtends { +class SerializationFormat { public: virtual ~SerializationFormat() = default; @@ -38,8 +36,6 @@ public: virtual void writeTUSummary(const TUSummary &Summary, llvm::StringRef OutputDir) = 0; - static char ID; // For RTTIExtends. - protected: // Helpers providing access to implementation details of basic data structures // for efficient serialization/deserialization. diff --git a/clang/include/clang/Analysis/Scalable/TUSummary/EntitySummary.h b/clang/include/clang/Analysis/Scalable/TUSummary/EntitySummary.h index b5b2fe128d0c..4bdb385d49a0 100644 --- a/clang/include/clang/Analysis/Scalable/TUSummary/EntitySummary.h +++ b/clang/include/clang/Analysis/Scalable/TUSummary/EntitySummary.h @@ -10,17 +10,14 @@ #define LLVM_CLANG_ANALYSIS_SCALABLE_TUSUMMARY_ENTITYSUMMARY_H #include "clang/Analysis/Scalable/Model/SummaryName.h" -#include "llvm/Support/ExtensibleRTTI.h" namespace clang::ssaf { /// Base class for analysis-specific summary data. -class EntitySummary : public llvm::RTTIExtends { +class EntitySummary { public: virtual ~EntitySummary() = default; virtual SummaryName getSummaryName() const = 0; - - static char ID; // For RTTIExtends. }; } // namespace clang::ssaf diff --git a/clang/lib/Analysis/Scalable/CMakeLists.txt b/clang/lib/Analysis/Scalable/CMakeLists.txt index 47fe87074d72..4145e7a521ba 100644 --- a/clang/lib/Analysis/Scalable/CMakeLists.txt +++ b/clang/lib/Analysis/Scalable/CMakeLists.txt @@ -7,9 +7,7 @@ add_clang_library(clangAnalysisScalable Model/BuildNamespace.cpp Model/EntityIdTable.cpp Model/EntityName.cpp - Serialization/SerializationFormat.cpp Serialization/SerializationFormatRegistry.cpp - TUSummary/EntitySummary.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 07ed1157f87f..000000000000 --- a/clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp +++ /dev/null @@ -1,13 +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" - -using namespace clang::ssaf; - -char SerializationFormat::ID = 0; diff --git a/clang/lib/Analysis/Scalable/TUSummary/EntitySummary.cpp b/clang/lib/Analysis/Scalable/TUSummary/EntitySummary.cpp deleted file mode 100644 index 96ef3372b776..000000000000 --- a/clang/lib/Analysis/Scalable/TUSummary/EntitySummary.cpp +++ /dev/null @@ -1,11 +0,0 @@ -//===- EntitySummary.cpp --------------------------------------------------===// -// -// 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/TUSummary/EntitySummary.h" - -char clang::ssaf::EntitySummary::ID = 0; diff --git a/clang/unittests/Analysis/Scalable/Registries/FancyAnalysisData.cpp b/clang/unittests/Analysis/Scalable/Registries/FancyAnalysisData.cpp index ac4e625aaf67..3f1e98199f56 100644 --- a/clang/unittests/Analysis/Scalable/Registries/FancyAnalysisData.cpp +++ b/clang/unittests/Analysis/Scalable/Registries/FancyAnalysisData.cpp @@ -18,22 +18,19 @@ using SpecialFileRepresentation = MockSerializationFormat::SpecialFileRepresentation; namespace { -struct FancyAnalysisData final - : llvm::RTTIExtends { +struct FancyAnalysisData final : EntitySummary { SummaryName getSummaryName() const override { return SummaryName("FancyAnalysis"); } std::string Text; - static char ID; }; -char FancyAnalysisData::ID = 0; } // namespace static SpecialFileRepresentation serializeFancyAnalysis(const EntitySummary &Data, MockSerializationFormat &Format) { - const auto &FancyAnalysis = llvm::cast(Data); + const auto &FancyAnalysis = static_cast(Data); return SpecialFileRepresentation{/*MockRepresentation=*/FancyAnalysis.Text}; } diff --git a/clang/unittests/Analysis/Scalable/Registries/MockSerializationFormat.cpp b/clang/unittests/Analysis/Scalable/Registries/MockSerializationFormat.cpp index 719db61486df..a6d4b51178c9 100644 --- a/clang/unittests/Analysis/Scalable/Registries/MockSerializationFormat.cpp +++ b/clang/unittests/Analysis/Scalable/Registries/MockSerializationFormat.cpp @@ -27,10 +27,7 @@ using namespace clang; using namespace ssaf; -char MockSerializationFormat::ID = 0; - -MockSerializationFormat::MockSerializationFormat() - : llvm::RTTIExtends() { +MockSerializationFormat::MockSerializationFormat() { for (const auto &FormatInfoEntry : llvm::Registry::entries()) { std::unique_ptr Info = FormatInfoEntry.instantiate(); bool Inserted = FormatInfos.try_emplace(Info->ForSummary, *Info).second; diff --git a/clang/unittests/Analysis/Scalable/Registries/MockSerializationFormat.h b/clang/unittests/Analysis/Scalable/Registries/MockSerializationFormat.h index 8c287c214362..1bc37840201e 100644 --- a/clang/unittests/Analysis/Scalable/Registries/MockSerializationFormat.h +++ b/clang/unittests/Analysis/Scalable/Registries/MockSerializationFormat.h @@ -12,13 +12,11 @@ #include "clang/Analysis/Scalable/Model/SummaryName.h" #include "clang/Analysis/Scalable/Serialization/SerializationFormat.h" #include "llvm/ADT/STLFunctionalExtras.h" -#include "llvm/Support/ExtensibleRTTI.h" #include namespace clang::ssaf { -class MockSerializationFormat final - : public llvm::RTTIExtends { +class MockSerializationFormat final : public SerializationFormat { public: MockSerializationFormat();