[llvm] r222447 - Compilation test for PostOrderIterator.

Michael Ilseman milseman at apple.com
Thu Nov 20 11:33:33 PST 2014


Author: milseman
Date: Thu Nov 20 13:33:33 2014
New Revision: 222447

URL: http://llvm.org/viewvc/llvm-project?rev=222447&view=rev
Log:
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.

Added:
    llvm/trunk/unittests/ADT/PostOrderIteratorTest.cpp
Modified:
    llvm/trunk/unittests/ADT/CMakeLists.txt

Modified: llvm/trunk/unittests/ADT/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/CMakeLists.txt?rev=222447&r1=222446&r2=222447&view=diff
==============================================================================
--- llvm/trunk/unittests/ADT/CMakeLists.txt (original)
+++ llvm/trunk/unittests/ADT/CMakeLists.txt Thu Nov 20 13:33:33 2014
@@ -27,6 +27,7 @@ set(ADTSources
   PackedVectorTest.cpp
   PointerIntPairTest.cpp
   PointerUnionTest.cpp
+  PostOrderIteratorTest.cpp
   SCCIteratorTest.cpp
   SmallPtrSetTest.cpp
   SmallStringTest.cpp

Added: llvm/trunk/unittests/ADT/PostOrderIteratorTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/PostOrderIteratorTest.cpp?rev=222447&view=auto
==============================================================================
--- llvm/trunk/unittests/ADT/PostOrderIteratorTest.cpp (added)
+++ llvm/trunk/unittests/ADT/PostOrderIteratorTest.cpp Thu Nov 20 13:33:33 2014
@@ -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);
+}
+}





More information about the llvm-commits mailing list