================
@@ -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

Reply via email to