diff --git a/llvm/include/llvm/ADT/SmallPtrSet.h b/llvm/include/llvm/ADT/SmallPtrSet.h index f0f28ac37761e..28a217afcd0a2 100644 --- a/llvm/include/llvm/ADT/SmallPtrSet.h +++ b/llvm/include/llvm/ADT/SmallPtrSet.h @@ -129,7 +129,7 @@ class SmallPtrSetImplBase : public DebugEpochBase { // We must Grow -- find the size where we'd be 75% full, then round up to // the next power of two. size_type NewSize = NumEntries + (NumEntries / 3); - NewSize = 1 << (Log2_32_Ceil(NewSize) + 1); + NewSize = 1 << Log2_32_Ceil(NewSize); // Like insert_imp_big, always allocate at least 128 elements. NewSize = std::max(128u, NewSize); Grow(NewSize); diff --git a/llvm/unittests/ADT/SmallPtrSetTest.cpp b/llvm/unittests/ADT/SmallPtrSetTest.cpp index 4ea7403b65abc..a627091b90c70 100644 --- a/llvm/unittests/ADT/SmallPtrSetTest.cpp +++ b/llvm/unittests/ADT/SmallPtrSetTest.cpp @@ -475,4 +475,8 @@ TEST(SmallPtrSetTest, Reserve) { EXPECT_EQ(Set.capacity(), 128u); EXPECT_EQ(Set.size(), 6u); EXPECT_THAT(Set, UnorderedElementsAre(&Vals[0], &Vals[1], &Vals[2], &Vals[3], &Vals[4], &Vals[5])); + + // Reserving 192 should result in 256 buckets. + Set.reserve(192); + EXPECT_EQ(Set.capacity(), 256u); }