Fixed one small stupid, but critical bug.
authorStepan Dyatkovskiy <stpworld@narod.ru>
Tue, 15 May 2012 09:21:39 +0000 (09:21 +0000)
committerStepan Dyatkovskiy <stpworld@narod.ru>
Tue, 15 May 2012 09:21:39 +0000 (09:21 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@156810 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/FlatArrayMap.h
unittests/ADT/SmallMapTest.cpp

index f794c9c22f2a5505e9e29391e469d2e1554588fc..b414cde7a163a58131b4dd0ebe5b109ddce0df3d 100644 (file)
@@ -162,10 +162,10 @@ namespace llvm {
     }
 
     iterator end() {
-      return iterator(Array + MaxArraySize);
+      return iterator(Array + NumElements);
     }
     const_iterator end() const {
-      return const_iterator(Array + MaxArraySize);
+      return const_iterator(Array + NumElements);
     }
 
     // Modifiers
index b2079243fd5e9e35cb1522cafa50513fcae1dd53..10ba0ef2bfb1483391ff67afa26335326eacb5b2 100644 (file)
@@ -144,4 +144,19 @@ TEST(SmallMapTest, GeneralTest) {
                 (i->first == &buf[1] && i->second == 1) ||
                 (i->first == &buf[2] && i->second == 2));
   }
+
+  // Check that iteration only visits elements that actually exist.
+  SmallMap<int, int, 8> d;
+  d[0] = 2;
+  d[1] = 3;
+  unsigned counts[2] = { 0, 0 };
+  for (SmallMap<int, int, 8>::iterator I = d.begin(), E = d.end(); I != E;
+       ++I) {
+    EXPECT_TRUE(I->first == 0 || I->first == 1);
+    EXPECT_TRUE(I->second == 2 || I->second == 3);
+    EXPECT_EQ(I->second, I->first + 2);
+    ++counts[I->first];
+  }
+  EXPECT_EQ(counts[0], 1);
+  EXPECT_EQ(counts[1], 1);   
 }