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" 13 using namespace llvm; 14 15 namespace { 16 17 // Whether we're able to compile 18 TEST(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