Compilation test for PostOrderIterator.

If the template specialization for externally managed sets in
PostOrderIterator call too far out of sync with each other, this unit
test will fail to build. This is especially useful for developers who
may not build Clang (the only in-tree user) every time.

llvm-svn: 222447
This commit is contained in:
Michael Ilseman 2014-11-20 19:33:33 +00:00
parent 6595839fc5
commit d6a81614c4
2 changed files with 38 additions and 0 deletions

View File

@ -27,6 +27,7 @@ set(ADTSources
PackedVectorTest.cpp
PointerIntPairTest.cpp
PointerUnionTest.cpp
PostOrderIteratorTest.cpp
SCCIteratorTest.cpp
SmallPtrSetTest.cpp
SmallStringTest.cpp

View File

@ -0,0 +1,37 @@
//===- PostOrderIteratorTest.cpp - PostOrderIterator unit tests -----------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include "gtest/gtest.h"
#include "llvm/ADT/PostOrderIterator.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/CFG.h"
using namespace llvm;
namespace {
// Whether we're able to compile
TEST(PostOrderIteratorTest, Compiles) {
typedef SmallPtrSet<void *, 4> ExtSetTy;
// Tests that template specializations are kept up to date
void *Null = nullptr;
po_iterator_storage<std::set<void *>, false> PIS;
PIS.insertEdge(Null, Null);
ExtSetTy Ext;
po_iterator_storage<ExtSetTy, true> PISExt(Ext);
PIS.insertEdge(Null, Null);
// Test above, but going through po_iterator (which inherits from template
// base)
BasicBlock *NullBB = nullptr;
auto PI = po_end(NullBB);
PI.insertEdge(NullBB, NullBB);
auto PIExt = po_ext_end(NullBB, Ext);
PIExt.insertEdge(NullBB, NullBB);
}
}