aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/ADT/StringRefTest.cpp
diff options
context:
space:
mode:
authorJordan Rose <jordan_rose@apple.com>2016-11-07 20:40:16 +0000
committerJordan Rose <jordan_rose@apple.com>2016-11-07 20:40:16 +0000
commit5caae908b71c9a4f94a96e336b674f07598fe525 (patch)
treea326e893a7f4671032d43c34dcc7da179ab180d6 /llvm/unittests/ADT/StringRefTest.cpp
parentf95a459d5915462f7bf52414557caeffce8aa8ed (diff)
downloadllvm-5caae908b71c9a4f94a96e336b674f07598fe525.zip
llvm-5caae908b71c9a4f94a96e336b674f07598fe525.tar.gz
llvm-5caae908b71c9a4f94a96e336b674f07598fe525.tar.bz2
Add tests for r286139.
llvm-svn: 286141
Diffstat (limited to 'llvm/unittests/ADT/StringRefTest.cpp')
-rw-r--r--llvm/unittests/ADT/StringRefTest.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/llvm/unittests/ADT/StringRefTest.cpp b/llvm/unittests/ADT/StringRefTest.cpp
index ca6b011..9c65a4b3 100644
--- a/llvm/unittests/ADT/StringRefTest.cpp
+++ b/llvm/unittests/ADT/StringRefTest.cpp
@@ -32,6 +32,34 @@ std::ostream &operator<<(std::ostream &OS,
}
+// Check that we can't accidentally assign a temporary std::string to a
+// StringRef. (Unfortunately we can't make use of the same thing with
+// constructors.)
+//
+// Disable this check under MSVC; even MSVC 2015 isn't consistent between
+// std::is_assignable and actually writing such an assignment.
+#if !defined(_MSC_VER)
+static_assert(
+ !std::is_assignable<StringRef, std::string>::value,
+ "Assigning from prvalue std::string");
+static_assert(
+ !std::is_assignable<StringRef, std::string &&>::value,
+ "Assigning from xvalue std::string");
+static_assert(
+ std::is_assignable<StringRef, std::string &>::value,
+ "Assigning from lvalue std::string");
+static_assert(
+ std::is_assignable<StringRef, const char *>::value,
+ "Assigning from prvalue C string");
+static_assert(
+ std::is_assignable<StringRef, const char * &&>::value,
+ "Assigning from xvalue C string");
+static_assert(
+ std::is_assignable<StringRef, const char * &>::value,
+ "Assigning from lvalue C string");
+#endif
+
+
namespace {
TEST(StringRefTest, Construction) {
EXPECT_EQ("", StringRef());
@@ -40,6 +68,14 @@ TEST(StringRefTest, Construction) {
EXPECT_EQ("hello", StringRef(std::string("hello")));
}
+TEST(StringRefTest, EmptyInitializerList) {
+ StringRef S = {};
+ EXPECT_TRUE(S.empty());
+
+ S = {};
+ EXPECT_TRUE(S.empty());
+}
+
TEST(StringRefTest, Iteration) {
StringRef S("hello");
const char *p = "hello";