]>
Commit | Line | Data |
---|---|---|
85aaf69f SL |
1 | //=======- CallGraphTest.cpp - Unit tests for the CG analysis -------------===// |
2 | // | |
3 | // The LLVM Compiler Infrastructure | |
4 | // | |
5 | // This file is distributed under the University of Illinois Open Source | |
6 | // License. See LICENSE.TXT for details. | |
7 | // | |
8 | //===----------------------------------------------------------------------===// | |
9 | ||
10 | #include "llvm/Analysis/CallGraph.h" | |
11 | #include "llvm/IR/LLVMContext.h" | |
12 | #include "llvm/IR/Module.h" | |
13 | #include "gtest/gtest.h" | |
14 | ||
15 | using namespace llvm; | |
16 | ||
17 | namespace { | |
18 | ||
19 | template <typename Ty> void canSpecializeGraphTraitsIterators(Ty *G) { | |
20 | typedef typename GraphTraits<Ty *>::NodeType NodeTy; | |
21 | ||
22 | auto I = GraphTraits<Ty *>::nodes_begin(G); | |
23 | auto E = GraphTraits<Ty *>::nodes_end(G); | |
24 | auto X = ++I; | |
25 | ||
26 | // Should be able to iterate over all nodes of the graph. | |
27 | static_assert(std::is_same<decltype(*I), NodeTy &>::value, | |
28 | "Node type does not match"); | |
29 | static_assert(std::is_same<decltype(*X), NodeTy &>::value, | |
30 | "Node type does not match"); | |
31 | static_assert(std::is_same<decltype(*E), NodeTy &>::value, | |
32 | "Node type does not match"); | |
33 | ||
34 | NodeTy *N = GraphTraits<Ty *>::getEntryNode(G); | |
35 | ||
36 | auto S = GraphTraits<NodeTy *>::child_begin(N); | |
37 | auto F = GraphTraits<NodeTy *>::child_end(N); | |
38 | ||
39 | // Should be able to iterate over immediate successors of a node. | |
40 | static_assert(std::is_same<decltype(*S), NodeTy *>::value, | |
41 | "Node type does not match"); | |
42 | static_assert(std::is_same<decltype(*F), NodeTy *>::value, | |
43 | "Node type does not match"); | |
44 | } | |
45 | ||
46 | TEST(CallGraphTest, GraphTraitsSpecialization) { | |
47 | Module M("", getGlobalContext()); | |
48 | CallGraph CG(M); | |
49 | ||
50 | canSpecializeGraphTraitsIterators(&CG); | |
51 | } | |
52 | ||
53 | TEST(CallGraphTest, GraphTraitsConstSpecialization) { | |
54 | Module M("", getGlobalContext()); | |
55 | CallGraph CG(M); | |
56 | ||
57 | canSpecializeGraphTraitsIterators(const_cast<const CallGraph *>(&CG)); | |
58 | } | |
59 | } |