[clang] ffeb9c1 - [clang][ssaf][NFC] Make SSAFOptions available in Builders and Extractors (#204684)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 23 00:09:04 PDT 2026
Author: Balázs Benics
Date: 2026-06-23T07:08:59Z
New Revision: ffeb9c1d2612cb5729889b6e82ade060192722dd
URL: https://github.com/llvm/llvm-project/commit/ffeb9c1d2612cb5729889b6e82ade060192722dd
DIFF: https://github.com/llvm/llvm-project/commit/ffeb9c1d2612cb5729889b6e82ade060192722dd.diff
LOG: [clang][ssaf][NFC] Make SSAFOptions available in Builders and Extractors (#204684)
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 <jkorous at apple.com>
Co-authored-by: Claude Opus 4.7 <noreply at anthropic.com>
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) {
More information about the cfe-commits
mailing list