================
@@ -7,36 +7,111 @@
//===----------------------------------------------------------------------===//
#include
"clang/Analysis/Scalable/Analyses/UnsafeBufferUsage/UnsafeBufferUsage.h"
+#include "clang/AST/DynamicRecursiveASTVisitor.h"
+#include "clang/Analysis/Scalable/ASTEntityMapping.h"
#include
"clang/Analysis/Scalable/Analyses/UnsafeBufferUsage/UnsafeBufferUsageBuilder.h"
+#include
"clang/Analysis/Scalable/Analyses/UnsafeBufferUsage/UnsafeBufferUsageExtractor.h"
#include "clang/Analysis/Scalable/Model/EntityId.h"
-#include "clang/Analysis/Scalable/Model/EntityIdTable.h"
+#include "clang/Analysis/Scalable/Model/EntityName.h"
+#include "clang/Analysis/Scalable/TUSummary/TUSummary.h"
+#include "clang/Frontend/ASTUnit.h"
+#include "clang/Tooling/Tooling.h"
+#include "gmock/gmock.h"
#include "gtest/gtest.h"
using namespace clang;
using namespace ssaf;
namespace {
-constexpr inline auto buildEntityPointerLevel =
- UnsafeBufferUsageTUSummaryBuilder::buildEntityPointerLevel;
-constexpr inline auto buildUnsafeBufferUsageEntitySummary =
- UnsafeBufferUsageTUSummaryBuilder::buildUnsafeBufferUsageEntitySummary;
+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<NamedDecl>(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 testing::Test {
protected:
- EntityIdTable Table;
+ TUSummary TUSummary;
+ UnsafeBufferUsageTUSummaryBuilder Builder;
+ UnsafeBufferUsageTUSummaryExtractor Extractor;
+ std::unique_ptr<ASTUnit> AST;
+
+ UnsafeBufferUsageTest()
+ : TUSummary(
+ BuildNamespace(BuildNamespaceKind::CompilationUnit, "Mock.cpp")),
+ Builder(TUSummary),
+ Extractor(UnsafeBufferUsageTUSummaryExtractor(Builder)) {}
+
+ std::unique_ptr<UnsafeBufferUsageEntitySummary>
+ setUpTest(StringRef Code, StringRef ContributorName) {
+ AST = tooling::buildASTFromCodeWithArgs(Code, {});
----------------
steakhal wrote:
Now that we no longer need the args, we can use the simpler API.
```suggestion
AST = tooling::buildASTFromCode(Code);
```
https://github.com/llvm/llvm-project/pull/182941
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits