Author: Balázs Benics
Date: 2026-06-23T13:13:04Z
New Revision: 592e9d3e6a82b13aeccfc755aa5025b41cbfc260

URL: 
https://github.com/llvm/llvm-project/commit/592e9d3e6a82b13aeccfc755aa5025b41cbfc260
DIFF: 
https://github.com/llvm/llvm-project/commit/592e9d3e6a82b13aeccfc755aa5025b41cbfc260.diff

LOG: Reland "[clang][ssaf][NFC] Make SSAFOptions available in Builders and 
Extractors" (#205334)

The original version of this was reverted part of #205279 because I
didn't know if this or the other patch caused the Windows build
failures. It turns out this patch is fine. I'm relating this now.

---

Now that we have SSAFOptions, it would make it a lot more ergonomic if
it was accessible from builders and extractors.
This PR does exactly that.

Part of rdar://179151023

Co-authored-by: Jan Korous <[email protected]>
Co-authored-by: Claude Opus 4.7 <[email protected]>

Added: 
    

Modified: 
    
clang/include/clang/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummaryBuilder.h
    
clang/include/clang/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummaryExtractor.h
    
clang/lib/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowExtractor.cpp
    
clang/lib/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummaryExtractor.cpp
    
clang/lib/ScalableStaticAnalysisFramework/Frontend/TUSummaryExtractorFrontendAction.cpp
    
clang/unittests/ScalableStaticAnalysisFramework/Analyses/CallGraph/CallGraphExtractorTest.cpp
    
clang/unittests/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowTest.cpp
    
clang/unittests/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageTest.cpp
    
clang/unittests/ScalableStaticAnalysisFramework/Registries/SummaryExtractorRegistryTest.cpp
    clang/unittests/ScalableStaticAnalysisFramework/TUSummaryBuilderTest.cpp

Removed: 
    


################################################################################
diff  --git 
a/clang/include/clang/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummaryBuilder.h
 
b/clang/include/clang/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummaryBuilder.h
index f9ebe5358b585..38bd60718ed9c 100644
--- 
a/clang/include/clang/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummaryBuilder.h
+++ 
b/clang/include/clang/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummaryBuilder.h
@@ -18,11 +18,13 @@
 namespace clang::ssaf {
 
 class EntityName;
+class SSAFOptions;
 class TUSummary;
 
 class TUSummaryBuilder {
 public:
-  explicit TUSummaryBuilder(TUSummary &Summary) : Summary(Summary) {}
+  TUSummaryBuilder(TUSummary &Summary, const SSAFOptions &Options)
+      : Summary(Summary), Options(Options) {}
 
   EntityId addEntity(const EntityName &EN, EntityLinkageType Linkage);
 
@@ -35,8 +37,12 @@ class TUSummaryBuilder {
   std::pair<EntitySummary *, bool>
   addSummary(EntityId Entity, std::unique_ptr<ConcreteEntitySummary> &&Data);
 
+  /// \returns the \c SSAFOptions of this builder.
+  const SSAFOptions &getOptions() const { return Options; }
+
 private:
   TUSummary &Summary;
+  const SSAFOptions &Options;
 
   std::pair<EntitySummary *, bool>
   addSummaryImpl(EntityId Entity, std::unique_ptr<EntitySummary> &&Data);

diff  --git 
a/clang/include/clang/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummaryExtractor.h
 
b/clang/include/clang/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummaryExtractor.h
index 46b0ae835d729..b943748873821 100644
--- 
a/clang/include/clang/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummaryExtractor.h
+++ 
b/clang/include/clang/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummaryExtractor.h
@@ -15,6 +15,7 @@
 #include <optional>
 
 namespace clang::ssaf {
+class SSAFOptions;
 class TUSummaryBuilder;
 
 class TUSummaryExtractor : public ASTConsumer {
@@ -32,6 +33,9 @@ class TUSummaryExtractor : public ASTConsumer {
   /// \returns the EntityId, or std::nullopt if EntityName creation fails.
   std::optional<EntityId> addEntityForReturn(const FunctionDecl *FD);
 
+  /// \returns the \c SSAFOptions of the builder.
+  const SSAFOptions &getOptions() const;
+
 protected:
   TUSummaryBuilder &SummaryBuilder;
 };

diff  --git 
a/clang/lib/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowExtractor.cpp
 
b/clang/lib/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowExtractor.cpp
index 38e3e3ec3ab9e..ef5932c52a6c3 100644
--- 
a/clang/lib/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowExtractor.cpp
+++ 
b/clang/lib/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowExtractor.cpp
@@ -311,8 +311,7 @@ PointerFlowMatcher::matchesInitializerList(const ValueDecl 
*Base,
 
 class PointerFlowTUSummaryExtractor : public TUSummaryExtractor {
 public:
-  PointerFlowTUSummaryExtractor(TUSummaryBuilder &Builder)
-      : TUSummaryExtractor(Builder) {}
+  using TUSummaryExtractor::TUSummaryExtractor;
 
   /// \return a non-null unique pointer to a PointerFlowEntitySummary
   std::unique_ptr<PointerFlowEntitySummary>

diff  --git 
a/clang/lib/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummaryExtractor.cpp
 
b/clang/lib/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummaryExtractor.cpp
index f0602e0d5550f..ccd5eef377d2d 100644
--- 
a/clang/lib/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummaryExtractor.cpp
+++ 
b/clang/lib/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummaryExtractor.cpp
@@ -74,3 +74,7 @@ TUSummaryExtractor::addEntityForReturn(const FunctionDecl 
*FD) {
     return std::nullopt;
   return SummaryBuilder.addEntity(*Name, getLinkageForDecl(FD));
 }
+
+const SSAFOptions &TUSummaryExtractor::getOptions() const {
+  return SummaryBuilder.getOptions();
+}

diff  --git 
a/clang/lib/ScalableStaticAnalysisFramework/Frontend/TUSummaryExtractorFrontendAction.cpp
 
b/clang/lib/ScalableStaticAnalysisFramework/Frontend/TUSummaryExtractorFrontendAction.cpp
index b4b3e85386428..4f290ccac3d16 100644
--- 
a/clang/lib/ScalableStaticAnalysisFramework/Frontend/TUSummaryExtractorFrontendAction.cpp
+++ 
b/clang/lib/ScalableStaticAnalysisFramework/Frontend/TUSummaryExtractorFrontendAction.cpp
@@ -106,9 +106,12 @@ class TUSummaryRunner final : public MultiplexConsumer {
   void HandleTranslationUnit(ASTContext &Ctx) override;
 
   TUSummary Summary;
-  TUSummaryBuilder Builder = TUSummaryBuilder(Summary);
-  std::unique_ptr<SerializationFormat> Format;
+
+  /// Owned by the \c CompilerInstance.
   const SSAFOptions &Opts;
+
+  TUSummaryBuilder Builder = TUSummaryBuilder(Summary, Opts);
+  std::unique_ptr<SerializationFormat> Format;
 };
 } // namespace
 
@@ -141,7 +144,7 @@ TUSummaryRunner::TUSummaryRunner(llvm::Triple TargetTriple,
       Summary(std::move(TargetTriple),
               BuildNamespace(BuildNamespaceKind::CompilationUnit,
                              Opts.CompilationUnitId)),
-      Format(std::move(Format)), Opts(Opts) {
+      Opts(Opts), Format(std::move(Format)) {
   assert(this->Format);
   assert(!Opts.CompilationUnitId.empty());
 

diff  --git 
a/clang/unittests/ScalableStaticAnalysisFramework/Analyses/CallGraph/CallGraphExtractorTest.cpp
 
b/clang/unittests/ScalableStaticAnalysisFramework/Analyses/CallGraph/CallGraphExtractorTest.cpp
index 69db546fbf93d..0a3685c4f1057 100644
--- 
a/clang/unittests/ScalableStaticAnalysisFramework/Analyses/CallGraph/CallGraphExtractorTest.cpp
+++ 
b/clang/unittests/ScalableStaticAnalysisFramework/Analyses/CallGraph/CallGraphExtractorTest.cpp
@@ -11,6 +11,7 @@
 #include "clang/AST/Decl.h"
 #include "clang/ASTMatchers/ASTMatchFinder.h"
 #include "clang/ASTMatchers/ASTMatchers.h"
+#include "clang/Frontend/SSAFOptions.h"
 #include 
"clang/ScalableStaticAnalysisFramework/Analyses/CallGraph/CallGraphSummary.h"
 #include "clang/ScalableStaticAnalysisFramework/Core/ASTEntityMapping.h"
 #include 
"clang/ScalableStaticAnalysisFramework/Core/TUSummary/ExtractorRegistry.h"
@@ -123,10 +124,11 @@ template <typename... Matchers> auto hasSummaryThat(const 
Matchers &...Ms) {
 static const SummaryName CallGraphName{CallGraphSummary::Name.str()};
 
 struct CallGraphExtractorTest : ssaf::TestFixture {
+  SSAFOptions Opts;
   TUSummary Summary{
       llvm::Triple("arm64-apple-macosx"),
       BuildNamespace(BuildNamespaceKind::CompilationUnit, "Mock.cpp")};
-  TUSummaryBuilder Builder = TUSummaryBuilder(Summary);
+  TUSummaryBuilder Builder = TUSummaryBuilder(Summary, Opts);
 
   /// Creates the AST and extractor, then extracts the summaries from the AST.
   /// This will update the \c AST \c Builder and \c Summary data members.

diff  --git 
a/clang/unittests/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowTest.cpp
 
b/clang/unittests/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowTest.cpp
index 44465a59d4cfd..49e7bdc21738b 100644
--- 
a/clang/unittests/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowTest.cpp
+++ 
b/clang/unittests/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowTest.cpp
@@ -13,6 +13,7 @@
 #include "clang/AST/DynamicRecursiveASTVisitor.h"
 #include "clang/AST/ExprCXX.h"
 #include "clang/Frontend/ASTUnit.h"
+#include "clang/Frontend/SSAFOptions.h"
 #include "clang/ScalableStaticAnalysisFramework/Core/Model/EntityId.h"
 #include 
"clang/ScalableStaticAnalysisFramework/Core/TUSummary/ExtractorRegistry.h"
 #include "clang/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummary.h"
@@ -146,6 +147,7 @@ struct EPLPair {
 
 class PointerFlowTest : public TestFixture {
 protected:
+  SSAFOptions Opts;
   TUSummary TUSum;
   TUSummaryBuilder Builder;
   std::unique_ptr<TUSummaryExtractor> Extractor;
@@ -154,7 +156,7 @@ class PointerFlowTest : public TestFixture {
   PointerFlowTest()
       : TUSum(llvm::Triple("arm64-apple-macosx"),
               BuildNamespace(BuildNamespaceKind::CompilationUnit, "Mock.cpp")),
-        Builder(TUSum), Extractor(nullptr) {}
+        Builder(TUSum, Opts), Extractor(nullptr) {}
 
   template <typename ContributorDecl = NamedDecl,
             typename =

diff  --git 
a/clang/unittests/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageTest.cpp
 
b/clang/unittests/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageTest.cpp
index c2354e0c1ac1b..5b9bd94ec2014 100644
--- 
a/clang/unittests/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageTest.cpp
+++ 
b/clang/unittests/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageTest.cpp
@@ -10,6 +10,7 @@
 #include "FindDecl.h"
 #include "TestFixture.h"
 #include "clang/Frontend/ASTUnit.h"
+#include "clang/Frontend/SSAFOptions.h"
 #include 
"clang/ScalableStaticAnalysisFramework/Analyses/EntityPointerLevel/EntityPointerLevel.h"
 #include "clang/ScalableStaticAnalysisFramework/Core/Model/EntityId.h"
 #include "clang/ScalableStaticAnalysisFramework/Core/Model/EntityIdTable.h"
@@ -35,6 +36,7 @@ using testing::UnorderedElementsAre;
 namespace {
 class UnsafeBufferUsageTest : public TestFixture {
 protected:
+  SSAFOptions Opts;
   TUSummary TUSum;
   TUSummaryBuilder Builder;
   std::unique_ptr<TUSummaryExtractor> Extractor;
@@ -43,7 +45,7 @@ class UnsafeBufferUsageTest : public TestFixture {
   UnsafeBufferUsageTest()
       : TUSum(llvm::Triple("arm64-apple-macosx"),
               BuildNamespace(BuildNamespaceKind::CompilationUnit, "Mock.cpp")),
-        Builder(TUSum) {}
+        Builder(TUSum, Opts) {}
 
   bool setUpTest(StringRef Code) {
     AST = tooling::buildASTFromCodeWithArgs(

diff  --git 
a/clang/unittests/ScalableStaticAnalysisFramework/Registries/SummaryExtractorRegistryTest.cpp
 
b/clang/unittests/ScalableStaticAnalysisFramework/Registries/SummaryExtractorRegistryTest.cpp
index fd6ad83225e10..2294c045d554b 100644
--- 
a/clang/unittests/ScalableStaticAnalysisFramework/Registries/SummaryExtractorRegistryTest.cpp
+++ 
b/clang/unittests/ScalableStaticAnalysisFramework/Registries/SummaryExtractorRegistryTest.cpp
@@ -8,6 +8,7 @@
 
 #include "MockTUSummaryBuilder.h"
 #include "clang/Frontend/MultiplexConsumer.h"
+#include "clang/Frontend/SSAFOptions.h"
 #include 
"clang/ScalableStaticAnalysisFramework/Core/TUSummary/ExtractorRegistry.h"
 #include "clang/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummary.h"
 #include "clang/Tooling/Tooling.h"
@@ -46,8 +47,9 @@ TEST(SummaryExtractorRegistryTest, 
EnumeratingRegistryEntries) {
 }
 
 TEST(SummaryExtractorRegistryTest, InstantiatingExtractor1) {
+  SSAFOptions Opts;
   TUSummary Summary = makeFakeSummary();
-  MockTUSummaryBuilder FakeBuilder(Summary);
+  MockTUSummaryBuilder FakeBuilder(Summary, Opts);
   {
     auto Consumer =
         makeTUSummaryExtractor("MockSummaryExtractor1", FakeBuilder);
@@ -60,8 +62,9 @@ TEST(SummaryExtractorRegistryTest, InstantiatingExtractor1) {
 }
 
 TEST(SummaryExtractorRegistryTest, InstantiatingExtractor2) {
+  SSAFOptions Opts;
   TUSummary Summary = makeFakeSummary();
-  MockTUSummaryBuilder FakeBuilder(Summary);
+  MockTUSummaryBuilder FakeBuilder(Summary, Opts);
   {
     auto Consumer =
         makeTUSummaryExtractor("MockSummaryExtractor2", FakeBuilder);
@@ -74,8 +77,9 @@ TEST(SummaryExtractorRegistryTest, InstantiatingExtractor2) {
 }
 
 TEST(SummaryExtractorRegistryTest, InvokingExtractors) {
+  SSAFOptions Opts;
   TUSummary Summary = makeFakeSummary();
-  MockTUSummaryBuilder FakeBuilder(Summary);
+  MockTUSummaryBuilder FakeBuilder(Summary, Opts);
   std::vector<std::unique_ptr<ASTConsumer>> Consumers;
   for (std::string Name : {"MockSummaryExtractor1", "MockSummaryExtractor2"}) {
     auto Consumer = makeTUSummaryExtractor(Name, FakeBuilder);

diff  --git 
a/clang/unittests/ScalableStaticAnalysisFramework/TUSummaryBuilderTest.cpp 
b/clang/unittests/ScalableStaticAnalysisFramework/TUSummaryBuilderTest.cpp
index ffcf068ce6956..55c5c781e42d9 100644
--- a/clang/unittests/ScalableStaticAnalysisFramework/TUSummaryBuilderTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysisFramework/TUSummaryBuilderTest.cpp
@@ -9,6 +9,7 @@
 #include 
"clang/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummaryBuilder.h"
 #include "FindDecl.h"
 #include "TestFixture.h"
+#include "clang/Frontend/SSAFOptions.h"
 #include "clang/ScalableStaticAnalysisFramework/Core/Model/BuildNamespace.h"
 #include "clang/ScalableStaticAnalysisFramework/Core/Model/EntityId.h"
 #include "clang/ScalableStaticAnalysisFramework/Core/Model/EntityLinkage.h"
@@ -89,10 +90,11 @@ void PrintTo(const MockSummaryData3 &S, std::ostream *OS) {
 }
 
 struct TUSummaryBuilderTest : ssaf::TestFixture {
+  SSAFOptions Opts;
   TUSummary Summary{
       llvm::Triple("arm64-apple-macosx"),
       BuildNamespace(BuildNamespaceKind::CompilationUnit, "Mock.cpp")};
-  TUSummaryBuilder Builder{Summary};
+  TUSummaryBuilder Builder{Summary, Opts};
   TUSummaryExtractor Extractor{Builder};
 
   [[nodiscard]] EntityId addTestEntity(llvm::StringRef USR) {


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

Reply via email to