1//===- 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//===----------------------------------------------------------------------===//
9#include "gtest/gtest.h"
10#include "llvm/ADT/PostOrderIterator.h"
11#include "llvm/IR/BasicBlock.h"
12#include "llvm/IR/CFG.h"
13using 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;
24  PIS.insertEdge(Null, Null);
25  ExtSetTy Ext;
26  po_iterator_storage<ExtSetTy, true> PISExt(Ext);
27  PIS.insertEdge(Null, Null);
28
29  // Test above, but going through po_iterator (which inherits from template
30  // base)
31  BasicBlock *NullBB = nullptr;
32  auto PI = po_end(NullBB);
33  PI.insertEdge(NullBB, NullBB);
34  auto PIExt = po_ext_end(NullBB, Ext);
35  PIExt.insertEdge(NullBB, NullBB);
36}
37}
38