Support backwards iteration starting from end().
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Fri, 19 Nov 2010 23:28:53 +0000 (23:28 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Fri, 19 Nov 2010 23:28:53 +0000 (23:28 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119871 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/IntervalMap.h
unittests/ADT/IntervalMapTest.cpp

index b128f31a8d22ca0b584a71eea92f7a775024e469..dd4eec3c63c892d6a414b2b92f8317cf6d7db703 100644 (file)
@@ -1235,7 +1235,7 @@ public:
     if (!branched()) {
       assert(rootOffset && "Cannot decrement begin()");
       --rootOffset;
-    } else if (treeLeafOffset())
+    } else if (valid() && treeLeafOffset())
       --treeLeafOffset();
     else
       treeDecrement();
index 5c8b61f278dca82232bdb524fbc9bfecc59408a9..c7def84340a69399821609a8d00424e68fb2e1c1 100644 (file)
@@ -352,6 +352,16 @@ TEST(IntervalMapTest, Branched) {
   EXPECT_FALSE(I.valid());
   EXPECT_TRUE(I == map.end());
 
+  // Backwards iteration.
+  for (unsigned i = 99; i; --i) {
+    --I;
+    ASSERT_TRUE(I.valid());
+    EXPECT_EQ(10*i, I.start());
+    EXPECT_EQ(10*i+5, I.stop());
+    EXPECT_EQ(i, *I);
+  }
+  EXPECT_TRUE(I == map.begin());
+
 }
 
 } // namespace