blob: 20c938e893260db2ddec86ebcb1bec7a2b9bd95d [file] [log] [blame]
Michael Ilsemand6a81612014-11-20 19:33:33 +00001//===- PostOrderIteratorTest.cpp - PostOrderIterator unit tests -----------===//
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//===----------------------------------------------------------------------===//
Michael Ilsemand6a81612014-11-20 19:33:33 +00009#include "llvm/ADT/PostOrderIterator.h"
10#include "llvm/IR/BasicBlock.h"
11#include "llvm/IR/CFG.h"
Chandler Carruth9a67b072017-06-06 11:06:56 +000012#include "gtest/gtest.h"
Michael Ilsemand6a81612014-11-20 19:33:33 +000013using namespace llvm;
14
15namespace {
16
17// Whether we're able to compile
18TEST(PostOrderIteratorTest, Compiles) {
19 typedef SmallPtrSet<void *, 4> ExtSetTy;
20
21 // Tests that template specializations are kept up to date
22 void *Null = nullptr;
23 po_iterator_storage<std::set<void *>, false> PIS;
Tim Shene0793db2016-08-15 21:52:54 +000024 PIS.insertEdge(Optional<void *>(), Null);
Michael Ilsemand6a81612014-11-20 19:33:33 +000025 ExtSetTy Ext;
26 po_iterator_storage<ExtSetTy, true> PISExt(Ext);
Tim Shene0793db2016-08-15 21:52:54 +000027 PIS.insertEdge(Optional<void *>(), Null);
Michael Ilsemand6a81612014-11-20 19:33:33 +000028
29 // Test above, but going through po_iterator (which inherits from template
30 // base)
31 BasicBlock *NullBB = nullptr;
32 auto PI = po_end(NullBB);
Tim Shene0793db2016-08-15 21:52:54 +000033 PI.insertEdge(Optional<BasicBlock *>(), NullBB);
Michael Ilsemand6a81612014-11-20 19:33:33 +000034 auto PIExt = po_ext_end(NullBB, Ext);
Tim Shene0793db2016-08-15 21:52:54 +000035 PIExt.insertEdge(Optional<BasicBlock *>(), NullBB);
Michael Ilsemand6a81612014-11-20 19:33:33 +000036}
37}