diff --git a/llvm/include/llvm/ADT/DenseMap.h b/llvm/include/llvm/ADT/DenseMap.h --- a/llvm/include/llvm/ADT/DenseMap.h +++ b/llvm/include/llvm/ADT/DenseMap.h @@ -924,6 +924,9 @@ this->insert(I, E); } + SmallDenseMap(std::initializer_list Vals) + : SmallDenseMap(Vals.begin(), Vals.end()) {} + ~SmallDenseMap() { this->destroyAll(); deallocateBuckets(); diff --git a/llvm/unittests/ADT/DenseMapTest.cpp b/llvm/unittests/ADT/DenseMapTest.cpp --- a/llvm/unittests/ADT/DenseMapTest.cpp +++ b/llvm/unittests/ADT/DenseMapTest.cpp @@ -547,6 +547,15 @@ EXPECT_TRUE(map.find_as("d") == map.end()); } +TEST(DenseMapCustomTest, SmallDenseMapInitializerList) { + SmallDenseMap M = {{0, 0}, {0, 1}, {1, 2}}; + EXPECT_EQ(2u, M.size()); + EXPECT_EQ(1u, M.count(0)); + EXPECT_EQ(0, M[0]); + EXPECT_EQ(1u, M.count(1)); + EXPECT_EQ(2, M[1]); +} + struct ContiguousDenseMapInfo { static inline unsigned getEmptyKey() { return ~0; } static inline unsigned getTombstoneKey() { return ~0U - 1; }