aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Stoklund Olesen <stoklund@2pi.dk>2010-11-19 23:28:53 +0000
committerJakob Stoklund Olesen <stoklund@2pi.dk>2010-11-19 23:28:53 +0000
commitdb52566d684a36cf1f320f91ca5c15d5cd075b95 (patch)
tree6e426eea9f65a4512c3010f073d5a84222eef81d
parenta197cba66d50f5411e0f45f7aa76cef9860ba28c (diff)
Support backwards iteration starting from end().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119871 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/ADT/IntervalMap.h2
-rw-r--r--unittests/ADT/IntervalMapTest.cpp10
2 files changed, 11 insertions, 1 deletions
diff --git a/include/llvm/ADT/IntervalMap.h b/include/llvm/ADT/IntervalMap.h
index b128f31a8d..dd4eec3c63 100644
--- a/include/llvm/ADT/IntervalMap.h
+++ b/include/llvm/ADT/IntervalMap.h
@@ -1235,7 +1235,7 @@ public:
if (!branched()) {
assert(rootOffset && "Cannot decrement begin()");
--rootOffset;
- } else if (treeLeafOffset())
+ } else if (valid() && treeLeafOffset())
--treeLeafOffset();
else
treeDecrement();
diff --git a/unittests/ADT/IntervalMapTest.cpp b/unittests/ADT/IntervalMapTest.cpp
index 5c8b61f278..c7def84340 100644
--- a/unittests/ADT/IntervalMapTest.cpp
+++ b/unittests/ADT/IntervalMapTest.cpp
@@ -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