[clang] [clang][ssaf] Drop llvm-RTTI support because we don't need it right now (PR #181198)

Balázs Benics via cfe-commits cfe-commits at lists.llvm.org
Thu Feb 12 10:13:26 PST 2026


https://github.com/steakhal created https://github.com/llvm/llvm-project/pull/181198

We discussed internally, and for now we will focus on an MVP and try to not complicate APIs unless that is strictly necessary.

>From 3c860cb5d6b4acdfb21f3e21abd278a3e4c006c8 Mon Sep 17 00:00:00 2001
From: Balazs Benics <benicsbalazs at gmail.com>
Date: Thu, 12 Feb 2026 18:57:22 +0100
Subject: [PATCH] [clang][ssaf] Drop llvm-RTTI support because we don't need it
 right now

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 ee220b6be18a6..78e4df0eb88fe 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<SerializationFormat, llvm::RTTIRoot> {
+class SerializationFormat {
 public:
   virtual ~SerializationFormat() = default;
 
@@ -38,8 +36,6 @@ class SerializationFormat
   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 b5b2fe128d0c4..4bdb385d49a01 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<EntitySummary, llvm::RTTIRoot> {
+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 47fe87074d728..4145e7a521ba4 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 07ed1157f87f0..0000000000000
--- 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 96ef3372b7762..0000000000000
--- 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 ac4e625aaf671..3f1e98199f56a 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<FancyAnalysisData, EntitySummary> {
+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<FancyAnalysisData>(Data);
+  const auto &FancyAnalysis = static_cast<const FancyAnalysisData &>(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 719db61486df5..a6d4b51178c94 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, SerializationFormat>() {
+MockSerializationFormat::MockSerializationFormat() {
   for (const auto &FormatInfoEntry : llvm::Registry<FormatInfo>::entries()) {
     std::unique_ptr<FormatInfo> 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 8c287c2143621..1bc37840201ea 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 <string>
 
 namespace clang::ssaf {
 
-class MockSerializationFormat final
-    : public llvm::RTTIExtends<MockSerializationFormat, SerializationFormat> {
+class MockSerializationFormat final : public SerializationFormat {
 public:
   MockSerializationFormat();
 



More information about the cfe-commits mailing list