brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 566733f Raw
61 lines · cpp
1//=======- CallGraphTest.cpp - Unit tests for the CG analysis -------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "llvm/Analysis/CallGraph.h"10#include "llvm/IR/LLVMContext.h"11#include "llvm/IR/Module.h"12#include "gtest/gtest.h"13 14using namespace llvm;15 16namespace {17 18template <typename Ty> void canSpecializeGraphTraitsIterators(Ty *G) {19  typedef typename GraphTraits<Ty *>::NodeRef NodeRef;20 21  auto I = GraphTraits<Ty *>::nodes_begin(G);22  auto E = GraphTraits<Ty *>::nodes_end(G);23  auto X = ++I;24 25  // Should be able to iterate over all nodes of the graph.26  static_assert(std::is_same_v<decltype(*I), NodeRef>,27                "Node type does not match");28  static_assert(std::is_same_v<decltype(*X), NodeRef>,29                "Node type does not match");30  static_assert(std::is_same_v<decltype(*E), NodeRef>,31                "Node type does not match");32 33  NodeRef N = GraphTraits<Ty *>::getEntryNode(G);34 35  auto S = GraphTraits<NodeRef>::child_begin(N);36  auto F = GraphTraits<NodeRef>::child_end(N);37 38  // Should be able to iterate over immediate successors of a node.39  static_assert(std::is_same_v<decltype(*S), NodeRef>,40                "Node type does not match");41  static_assert(std::is_same_v<decltype(*F), NodeRef>,42                "Node type does not match");43}44 45TEST(CallGraphTest, GraphTraitsSpecialization) {46  LLVMContext Context;47  Module M("", Context);48  CallGraph CG(M);49 50  canSpecializeGraphTraitsIterators(&CG);51}52 53TEST(CallGraphTest, GraphTraitsConstSpecialization) {54  LLVMContext Context;55  Module M("", Context);56  CallGraph CG(M);57 58  canSpecializeGraphTraitsIterators(const_cast<const CallGraph *>(&CG));59}60}61