================
@@ -0,0 +1,102 @@
+//===- EntityPointerLevelTest.cpp
-----------------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include
"clang/ScalableStaticAnalysis/Analyses/EntityPointerLevel/EntityPointerLevel.h"
+#include "FindDecl.h"
+#include "clang/AST/Decl.h"
+#include "clang/Frontend/ASTUnit.h"
+#include "clang/Tooling/Tooling.h"
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+#include <memory>
+#include <vector>
+
+using namespace clang;
+using namespace ssaf;
+using testing::ElementsAre;
+
+namespace {
+
+static std::vector<unsigned> levelsOf(const DeclPointerLevels &DPLs) {
+ std::vector<unsigned> Levels;
+ for (const DeclPointerLevel &DPL : DPLs)
+ Levels.push_back(DPL.PointerLevel);
+ return Levels;
+}
+
+// `elaborateHigherDeclPointerLevels` expands a DeclPointerLevel into an
+// ascending, exhaustive vector of DeclPointerLevels for the same declaration,
+// from the given level up to the maximum pointer level of the declared type.
+TEST(EntityPointerLevelTest, ElaborateHigherDeclPointerLevels) {
+ std::unique_ptr<ASTUnit> AST =
+ tooling::buildASTFromCodeWithArgs(R"cpp(
+ int *p; // one pointer level
+ int **q; // two pointer levels
+ int ***r; // three pointer levels
+ int *arr[10]; // array of pointers: two levels (array + pointer)
----------------
steakhal wrote:
Could you add these declarations as well? This should excercise the canonical
type assumptions.
```c++
int mat[3][4]; // 2D array: two levels
43 + typedef int *IP;
44 + IP *pp; // sugar for `int **`: two levels
```
https://github.com/llvm/llvm-project/pull/218196
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits