mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-30 21:56:43 +00:00
03b42e41bf
At the same time, fixes InstructionsTest::CastInst unittest: yes you can leave the IR in an invalid state and exit when you don't destroy the context (like the global one), no longer now. This is the first part of http://reviews.llvm.org/D19094 From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 266379
62 lines
1.9 KiB
C++
62 lines
1.9 KiB
C++
//=======- CallGraphTest.cpp - Unit tests for the CG analysis -------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/Analysis/CallGraph.h"
|
|
#include "llvm/IR/LLVMContext.h"
|
|
#include "llvm/IR/Module.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
using namespace llvm;
|
|
|
|
namespace {
|
|
|
|
template <typename Ty> void canSpecializeGraphTraitsIterators(Ty *G) {
|
|
typedef typename GraphTraits<Ty *>::NodeType NodeTy;
|
|
|
|
auto I = GraphTraits<Ty *>::nodes_begin(G);
|
|
auto E = GraphTraits<Ty *>::nodes_end(G);
|
|
auto X = ++I;
|
|
|
|
// Should be able to iterate over all nodes of the graph.
|
|
static_assert(std::is_same<decltype(*I), NodeTy &>::value,
|
|
"Node type does not match");
|
|
static_assert(std::is_same<decltype(*X), NodeTy &>::value,
|
|
"Node type does not match");
|
|
static_assert(std::is_same<decltype(*E), NodeTy &>::value,
|
|
"Node type does not match");
|
|
|
|
NodeTy *N = GraphTraits<Ty *>::getEntryNode(G);
|
|
|
|
auto S = GraphTraits<NodeTy *>::child_begin(N);
|
|
auto F = GraphTraits<NodeTy *>::child_end(N);
|
|
|
|
// Should be able to iterate over immediate successors of a node.
|
|
static_assert(std::is_same<decltype(*S), NodeTy *>::value,
|
|
"Node type does not match");
|
|
static_assert(std::is_same<decltype(*F), NodeTy *>::value,
|
|
"Node type does not match");
|
|
}
|
|
|
|
TEST(CallGraphTest, GraphTraitsSpecialization) {
|
|
LLVMContext Context;
|
|
Module M("", Context);
|
|
CallGraph CG(M);
|
|
|
|
canSpecializeGraphTraitsIterators(&CG);
|
|
}
|
|
|
|
TEST(CallGraphTest, GraphTraitsConstSpecialization) {
|
|
LLVMContext Context;
|
|
Module M("", Context);
|
|
CallGraph CG(M);
|
|
|
|
canSpecializeGraphTraitsIterators(const_cast<const CallGraph *>(&CG));
|
|
}
|
|
}
|