diff --git a/llvm/include/llvm/ADT/StringSet.h b/llvm/include/llvm/ADT/StringSet.h index bf2f04f424d13..454af55172d66 100644 --- a/llvm/include/llvm/ADT/StringSet.h +++ b/llvm/include/llvm/ADT/StringSet.h @@ -14,6 +14,7 @@ #ifndef LLVM_ADT_STRINGSET_H #define LLVM_ADT_STRINGSET_H +#include "llvm/ADT/ADL.h" #include "llvm/ADT/StringMap.h" namespace llvm { @@ -45,6 +46,10 @@ class StringSet : public StringMap { insert(*it); } + template void insert_range(Range &&R) { + insert(adl_begin(R), adl_end(R)); + } + template std::pair insert(const StringMapEntry &mapEntry) { diff --git a/llvm/unittests/ADT/StringSetTest.cpp b/llvm/unittests/ADT/StringSetTest.cpp index a804c1f17d1ce..8de05a2fe79d4 100644 --- a/llvm/unittests/ADT/StringSetTest.cpp +++ b/llvm/unittests/ADT/StringSetTest.cpp @@ -81,4 +81,14 @@ TEST_F(StringSetTest, Equal) { ASSERT_TRUE(A == A); } +TEST_F(StringSetTest, InsertRange) { + StringSet<> Set; + const char *Args[] = {"chair", "desk", "bed"}; + Set.insert_range(Args); + EXPECT_EQ(Set.size(), 3U); + EXPECT_TRUE(Set.contains("bed")); + EXPECT_TRUE(Set.contains("chair")); + EXPECT_TRUE(Set.contains("desk")); +} + } // end anonymous namespace