Author: Balázs Benics
Date: 2026-02-10T08:38:04Z
New Revision: 23987694127324951469a2134d3e5f56fa072ff9

URL: 
https://github.com/llvm/llvm-project/commit/23987694127324951469a2134d3e5f56fa072ff9
DIFF: 
https://github.com/llvm/llvm-project/commit/23987694127324951469a2134d3e5f56fa072ff9.diff

LOG: [clang][ssaf] Make EntitySummary llvm-RTTI friendly (#180613)

Added: 
    clang/lib/Analysis/Scalable/TUSummary/EntitySummary.cpp

Modified: 
    clang/include/clang/Analysis/Scalable/TUSummary/EntitySummary.h
    clang/lib/Analysis/Scalable/CMakeLists.txt
    clang/unittests/Analysis/Scalable/Registries/FancyAnalysisData.cpp

Removed: 
    


################################################################################
diff  --git a/clang/include/clang/Analysis/Scalable/TUSummary/EntitySummary.h 
b/clang/include/clang/Analysis/Scalable/TUSummary/EntitySummary.h
index 0691b230c9483..b5b2fe128d0c4 100644
--- a/clang/include/clang/Analysis/Scalable/TUSummary/EntitySummary.h
+++ b/clang/include/clang/Analysis/Scalable/TUSummary/EntitySummary.h
@@ -10,21 +10,17 @@
 #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 {
-private:
-  SummaryName Summary;
-
-protected:
-  EntitySummary(SummaryName Summary) : Summary(std::move(Summary)) {}
-
+class EntitySummary : public llvm::RTTIExtends<EntitySummary, llvm::RTTIRoot> {
 public:
-  SummaryName getSummaryName() const { return Summary; }
-
   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 c8f959e274c6d..47fe87074d728 100644
--- a/clang/lib/Analysis/Scalable/CMakeLists.txt
+++ b/clang/lib/Analysis/Scalable/CMakeLists.txt
@@ -9,6 +9,7 @@ add_clang_library(clangAnalysisScalable
   Model/EntityName.cpp
   Serialization/SerializationFormat.cpp
   Serialization/SerializationFormatRegistry.cpp
+  TUSummary/EntitySummary.cpp
   TUSummary/ExtractorRegistry.cpp
 
   LINK_LIBS

diff  --git a/clang/lib/Analysis/Scalable/TUSummary/EntitySummary.cpp 
b/clang/lib/Analysis/Scalable/TUSummary/EntitySummary.cpp
new file mode 100644
index 0000000000000..96ef3372b7762
--- /dev/null
+++ b/clang/lib/Analysis/Scalable/TUSummary/EntitySummary.cpp
@@ -0,0 +1,11 @@
+//===- 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 0f06ed7e159b5..1198e7a927a28 100644
--- a/clang/unittests/Analysis/Scalable/Registries/FancyAnalysisData.cpp
+++ b/clang/unittests/Analysis/Scalable/Registries/FancyAnalysisData.cpp
@@ -17,17 +17,22 @@ using SpecialFileRepresentation =
     MockSerializationFormat::SpecialFileRepresentation;
 
 namespace {
-struct FancyAnalysisData : EntitySummary {
-  FancyAnalysisData() : EntitySummary(SummaryName("FancyAnalysis")) {}
+struct FancyAnalysisData final
+    : llvm::RTTIExtends<FancyAnalysisData, 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 = static_cast<const FancyAnalysisData &>(Data);
+  const auto &FancyAnalysis = llvm::cast<FancyAnalysisData>(Data);
   return SpecialFileRepresentation{/*MockRepresentation=*/FancyAnalysis.Text};
 }
 


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

Reply via email to