diff --git a/llvm/include/llvm/ADT/StringExtras.h b/llvm/include/llvm/ADT/StringExtras.h index 30397b23ab03b..091a40dc8afd5 100644 --- a/llvm/include/llvm/ADT/StringExtras.h +++ b/llvm/include/llvm/ADT/StringExtras.h @@ -418,7 +418,7 @@ inline std::string join_impl(IteratorT Begin, IteratorT End, size_t Len = (std::distance(Begin, End) - 1) * Separator.size(); for (IteratorT I = Begin; I != End; ++I) - Len += (*I).size(); + Len += StringRef(*I).size(); S.reserve(Len); size_t PrevCapacity = S.capacity(); (void)PrevCapacity; diff --git a/llvm/unittests/ADT/StringExtrasTest.cpp b/llvm/unittests/ADT/StringExtrasTest.cpp index 971560b8eb8c4..3f69c91b270a3 100644 --- a/llvm/unittests/ADT/StringExtrasTest.cpp +++ b/llvm/unittests/ADT/StringExtrasTest.cpp @@ -59,8 +59,8 @@ TEST(StringExtrasTest, isUpper) { EXPECT_FALSE(isUpper('\?')); } -TEST(StringExtrasTest, Join) { - std::vector Items; +template void testJoin() { + ContainerT Items; EXPECT_EQ("", join(Items.begin(), Items.end(), " ")); Items = {"foo"}; @@ -74,6 +74,17 @@ TEST(StringExtrasTest, Join) { join(Items.begin(), Items.end(), " ")); } +TEST(StringExtrasTest, Join) { + { + SCOPED_TRACE("std::vector"); + testJoin>(); + } + { + SCOPED_TRACE("std::vector"); + testJoin>(); + } +} + TEST(StringExtrasTest, JoinItems) { const char *Foo = "foo"; std::string Bar = "bar";