summaryrefslogtreecommitdiffstats
path: root/clang/test/Lexer
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2012-03-08 21:59:28 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2012-03-08 21:59:28 +0000
commit812924502bb7fbe0525757576aa2d16072ab5a87 (patch)
treecf817c7931b543509af5f99d86be261a19e92b85 /clang/test/Lexer
parent0ef86b0ea3392c672dd3ce69e32aa6d3d33603dd (diff)
downloadbcm5719-llvm-812924502bb7fbe0525757576aa2d16072ab5a87.tar.gz
bcm5719-llvm-812924502bb7fbe0525757576aa2d16072ab5a87.zip
When checking the encoding of an 8-bit string literal, don't just check the
first codepoint! Also, don't reject empty raw string literals for spurious "encoding" issues. Also, don't rely on undefined behavior in ConvertUTF.c. llvm-svn: 152344
Diffstat (limited to 'clang/test/Lexer')
-rw-r--r--clang/test/Lexer/cxx0x_raw_string_delim_length.cpp8
-rw-r--r--clang/test/Lexer/string-literal-encoding.c15
2 files changed, 21 insertions, 2 deletions
diff --git a/clang/test/Lexer/cxx0x_raw_string_delim_length.cpp b/clang/test/Lexer/cxx0x_raw_string_delim_length.cpp
index e7d5c6f8cd2..b9f6d13ab74 100644
--- a/clang/test/Lexer/cxx0x_raw_string_delim_length.cpp
+++ b/clang/test/Lexer/cxx0x_raw_string_delim_length.cpp
@@ -1,3 +1,7 @@
-// RUN: %clang_cc1 -std=c++11 -E %s 2>&1 | grep 'error: raw string delimiter longer than 16 characters'
+// RUN: %clang_cc1 -std=c++11 -verify %s
-const char *str = R"abcdefghijkmnopqrstuvwxyz(abcdef)abcdefghijkmnopqrstuvwxyz";
+const char *str1 = R"(abcdef)"; // ok
+const char *str2 = R"foo()foo"; // ok
+const char *str3 = R"()"; // ok
+// FIXME: recover better than this.
+const char *str4 = R"abcdefghijkmnopqrstuvwxyz(abcdef)abcdefghijkmnopqrstuvwxyz"; // expected-error {{raw string delimiter longer than 16 characters}} expected-error {{expected expression}}
diff --git a/clang/test/Lexer/string-literal-encoding.c b/clang/test/Lexer/string-literal-encoding.c
index aa7cb73f626..57097dca88a 100644
--- a/clang/test/Lexer/string-literal-encoding.c
+++ b/clang/test/Lexer/string-literal-encoding.c
@@ -15,4 +15,19 @@ void f() {
char const *g = "Àéîõü"; // expected-warning {{illegal character encoding in string literal}}
char const *h = u8"Àéîõü"; // expected-error {{illegal character encoding in string literal}}
+ char const *i = R"(Àéîõü)"; // expected-warning {{illegal character encoding in string literal}}
+}
+
+void g() {
+ wchar_t const *a = L"foo Àéîõü"; // expected-error {{illegal character encoding in string literal}}
+
+ char16_t const *b = u"foo Àéîõü"; // expected-error {{illegal character encoding in string literal}}
+ char32_t const *c = U"foo Àéîõü"; // expected-error {{illegal character encoding in string literal}}
+ wchar_t const *d = LR"(foo Àéîõü)"; // expected-error {{illegal character encoding in string literal}}
+ char16_t const *e = uR"(foo Àéîõü)"; // expected-error {{illegal character encoding in string literal}}
+ char32_t const *f = UR"(foo Àéîõü)"; // expected-error {{illegal character encoding in string literal}}
+
+ char const *g = "foo Àéîõü"; // expected-warning {{illegal character encoding in string literal}}
+ char const *h = u8"foo Àéîõü"; // expected-error {{illegal character encoding in string literal}}
+ char const *i = R"(foo Àéîõü)"; // expected-warning {{illegal character encoding in string literal}}
}
OpenPOWER on IntegriCloud