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
