[clang] 6ccbdc3 - [clang][ssaf][NFC] Hoist findFnByName and findDeclByName (#195056)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 30 04:17:19 PDT 2026
Author: Balázs Benics
Date: 2026-04-30T11:17:14Z
New Revision: 6ccbdc30b0f8722724feba1fce4f9668b8b00e38
URL: https://github.com/llvm/llvm-project/commit/6ccbdc30b0f8722724feba1fce4f9668b8b00e38
DIFF: https://github.com/llvm/llvm-project/commit/6ccbdc30b0f8722724feba1fce4f9668b8b00e38.diff
LOG: [clang][ssaf][NFC] Hoist findFnByName and findDeclByName (#195056)
Split from #194448
This was already approved in
https://github.com/llvm/llvm-project/pull/194448#pullrequestreview-4201251523
Added:
clang/unittests/ScalableStaticAnalysisFramework/FindDecl.h
Modified:
clang/unittests/ScalableStaticAnalysisFramework/ASTEntityMappingTest.cpp
clang/unittests/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageTest.cpp
Removed:
################################################################################
diff --git a/clang/unittests/ScalableStaticAnalysisFramework/ASTEntityMappingTest.cpp b/clang/unittests/ScalableStaticAnalysisFramework/ASTEntityMappingTest.cpp
index da921b7b7ab35..9d79647f841c8 100644
--- a/clang/unittests/ScalableStaticAnalysisFramework/ASTEntityMappingTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysisFramework/ASTEntityMappingTest.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "clang/ScalableStaticAnalysisFramework/Core/ASTEntityMapping.h"
+#include "FindDecl.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclCXX.h"
@@ -20,23 +21,11 @@ using namespace clang::ast_matchers;
namespace clang::ssaf {
namespace {
-// Helper function to find a declaration by name
-template <typename DeclType>
-const DeclType *findDecl(ASTContext &Ctx, StringRef Name) {
- auto Matcher = namedDecl(hasName(Name)).bind("decl");
- auto Matches = match(Matcher, Ctx);
- if (Matches.empty())
- return nullptr;
- if (auto Result = Matches[0].getNodeAs<DeclType>("decl"))
- return dyn_cast<DeclType>(Result->getCanonicalDecl());
- return nullptr;
-}
-
TEST(ASTEntityMappingTest, FunctionDecl) {
auto AST = tooling::buildASTFromCode(R"cpp(void foo() {})cpp");
auto &Ctx = AST->getASTContext();
- const auto *FD = findDecl<FunctionDecl>(Ctx, "foo");
+ const auto *FD = findFnByName("foo", Ctx);
ASSERT_NE(FD, nullptr);
auto EntityName = getEntityName(FD);
@@ -47,7 +36,7 @@ TEST(ASTEntityMappingTest, VarDecl) {
auto AST = tooling::buildASTFromCode(R"cpp(int x = 42;)cpp");
auto &Ctx = AST->getASTContext();
- const auto *VD = findDecl<VarDecl>(Ctx, "x");
+ const auto *VD = findDeclByName<VarDecl>("x", Ctx);
ASSERT_NE(VD, nullptr);
auto EntityName = getEntityName(VD);
@@ -58,7 +47,7 @@ TEST(ASTEntityMappingTest, ParmVarDecl) {
auto AST = tooling::buildASTFromCode(R"cpp(void foo(int x) {})cpp");
auto &Ctx = AST->getASTContext();
- const auto *FD = findDecl<FunctionDecl>(Ctx, "foo");
+ const auto *FD = findFnByName("foo", Ctx);
ASSERT_NE(FD, nullptr);
ASSERT_EQ(FD->param_size(), 1u);
@@ -73,7 +62,7 @@ TEST(ASTEntityMappingTest, RecordDecl) {
auto AST = tooling::buildASTFromCode(R"cpp(struct S {};)cpp");
auto &Ctx = AST->getASTContext();
- const auto *RD = findDecl<RecordDecl>(Ctx, "S");
+ const auto *RD = findDeclByName<RecordDecl>("S", Ctx);
ASSERT_NE(RD, nullptr);
auto EntityName = getEntityName(RD);
@@ -84,7 +73,7 @@ TEST(ASTEntityMappingTest, FieldDecl) {
auto AST = tooling::buildASTFromCode(R"cpp(struct S { int field; };)cpp");
auto &Ctx = AST->getASTContext();
- const auto *FD = findDecl<FieldDecl>(Ctx, "field");
+ const auto *FD = findDeclByName<FieldDecl>("field", Ctx);
ASSERT_NE(FD, nullptr);
auto EntityName = getEntityName(FD);
@@ -143,7 +132,7 @@ TEST(ASTEntityMappingTest, UnsupportedDecl) {
auto AST = tooling::buildASTFromCode(R"cpp(namespace N {})cpp");
auto &Ctx = AST->getASTContext();
- const auto *ND = findDecl<NamespaceDecl>(Ctx, "N");
+ const auto *ND = findDeclByName<NamespaceDecl>("N", Ctx);
ASSERT_NE(ND, nullptr);
auto EntityName = getEntityName(ND);
@@ -154,7 +143,7 @@ TEST(ASTEntityMappingTest, FunctionReturn) {
auto AST = tooling::buildASTFromCode(R"cpp(int foo() { return 42; })cpp");
auto &Ctx = AST->getASTContext();
- const auto *FD = findDecl<FunctionDecl>(Ctx, "foo");
+ const auto *FD = findFnByName("foo", Ctx);
ASSERT_NE(FD, nullptr);
auto EntityName = getEntityNameForReturn(FD);
@@ -196,8 +185,8 @@ TEST(ASTEntityMappingTest, DifferentFunctionsDifferentNames) {
)cpp");
auto &Ctx = AST->getASTContext();
- const auto *Foo = findDecl<FunctionDecl>(Ctx, "foo");
- const auto *Bar = findDecl<FunctionDecl>(Ctx, "bar");
+ const auto *Foo = findFnByName("foo", Ctx);
+ const auto *Bar = findFnByName("bar", Ctx);
ASSERT_NE(Foo, nullptr);
ASSERT_NE(Bar, nullptr);
diff --git a/clang/unittests/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageTest.cpp b/clang/unittests/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageTest.cpp
index 4a631a28897d0..465488357e20e 100644
--- a/clang/unittests/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageTest.cpp
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "clang/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsage.h"
+#include "FindDecl.h"
#include "TestFixture.h"
#include "clang/AST/ASTConsumer.h"
-#include "clang/AST/DynamicRecursiveASTVisitor.h"
#include "clang/Frontend/ASTUnit.h"
#include "clang/ScalableStaticAnalysisFramework/Analyses/EntityPointerLevel/EntityPointerLevel.h"
#include "clang/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageTest.h"
@@ -36,36 +36,6 @@ using namespace ssaf;
using testing::UnorderedElementsAre;
namespace {
-template <typename SomeDecl = NamedDecl>
-const SomeDecl *findDeclByName(StringRef Name, ASTContext &Ctx) {
- class NamedDeclFinder : public DynamicRecursiveASTVisitor {
- public:
- StringRef SearchingName;
- const NamedDecl *FoundDecl = nullptr;
-
- NamedDeclFinder(StringRef SearchingName) : SearchingName(SearchingName) {}
-
- bool VisitDecl(Decl *D) override {
- if (const auto *ND = dyn_cast<SomeDecl>(D)) {
- if (ND->getNameAsString() == SearchingName) {
- FoundDecl = ND;
- return false;
- }
- }
- return true;
- }
- };
-
- NamedDeclFinder Finder(Name);
-
- Finder.TraverseDecl(Ctx.getTranslationUnitDecl());
- return dyn_cast_or_null<SomeDecl>(Finder.FoundDecl);
-}
-
-const FunctionDecl *findFnByName(StringRef Name, ASTContext &Ctx) {
- return findDeclByName<FunctionDecl>(Name, Ctx);
-}
-
class UnsafeBufferUsageTest : public TestFixture {
protected:
TUSummary TUSum;
diff --git a/clang/unittests/ScalableStaticAnalysisFramework/FindDecl.h b/clang/unittests/ScalableStaticAnalysisFramework/FindDecl.h
new file mode 100644
index 0000000000000..07c28c610380c
--- /dev/null
+++ b/clang/unittests/ScalableStaticAnalysisFramework/FindDecl.h
@@ -0,0 +1,49 @@
+//===- FindDecl.h -----------------------------------------------*- 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
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_UNITTESTS_SCALABLESTATICANALYSISFRAMEWORK_FINDDECL_H
+#define LLVM_CLANG_UNITTESTS_SCALABLESTATICANALYSISFRAMEWORK_FINDDECL_H
+
+#include "clang/AST/Decl.h"
+#include "clang/AST/DynamicRecursiveASTVisitor.h"
+
+namespace clang::ssaf {
+
+template <typename SomeDecl = clang::NamedDecl>
+const SomeDecl *findDeclByName(StringRef Name, ASTContext &Ctx) {
+ class NamedDeclFinder : public DynamicRecursiveASTVisitor {
+ public:
+ StringRef SearchingName;
+ const NamedDecl *FoundDecl = nullptr;
+
+ NamedDeclFinder(StringRef SearchingName) : SearchingName(SearchingName) {}
+
+ bool VisitDecl(Decl *D) override {
+ if (const auto *ND = dyn_cast<SomeDecl>(D)) {
+ if (ND->getNameAsString() == SearchingName) {
+ FoundDecl = ND;
+ return false;
+ }
+ }
+ return true;
+ }
+ };
+
+ NamedDeclFinder Finder(Name);
+
+ Finder.TraverseDecl(Ctx.getTranslationUnitDecl());
+ return dyn_cast_or_null<SomeDecl>(Finder.FoundDecl);
+}
+
+inline const FunctionDecl *findFnByName(StringRef Name, ASTContext &Ctx) {
+ return findDeclByName<FunctionDecl>(Name, Ctx);
+}
+
+} // namespace clang::ssaf
+
+#endif // LLVM_CLANG_UNITTESTS_SCALABLESTATICANALYSISFRAMEWORK_FINDDECL_H
More information about the cfe-commits
mailing list