Index: include/llvm/ADT/DenseSet.h =================================================================== --- include/llvm/ADT/DenseSet.h +++ include/llvm/ADT/DenseSet.h @@ -16,6 +16,7 @@ #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/DenseMapInfo.h" +#include "llvm/Support/MathExtras.h" #include "llvm/Support/type_traits.h" #include #include @@ -67,7 +68,7 @@ explicit DenseSetImpl(unsigned InitialReserve = 0) : TheMap(InitialReserve) {} DenseSetImpl(std::initializer_list Elems) - : DenseSetImpl(Elems.size()) { + : DenseSetImpl(NextPowerOf2(Elems.size())) { insert(Elems.begin(), Elems.end()); } Index: unittests/ADT/DenseSetTest.cpp =================================================================== --- unittests/ADT/DenseSetTest.cpp +++ unittests/ADT/DenseSetTest.cpp @@ -80,6 +80,12 @@ EXPECT_EQ(0u, set.count(3)); } +TYPED_TEST(DenseSetTest, InitializerListWithNonPowerOfTwoLength) { + // Make sure the initializer list works even when its length is not a power + // of two. + TypeParam set({1, 2, 3}); +} + TYPED_TEST(DenseSetTest, ConstIteratorComparison) { TypeParam set({1}); const TypeParam &cset = set;