summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@gmail.com>2011-08-11 04:06:15 +0000
committerCraig Topper <craig.topper@gmail.com>2011-08-11 04:06:15 +0000
commit54edccafc5e3ef89bcd43a3f716d0c978e2aff00 (patch)
tree9ddd9164c0276975333dcd47f910a70e46c6b30d /clang/test
parentdbd1352c80136b1a91edf3fa07c59e8956744a54 (diff)
downloadbcm5719-llvm-54edccafc5e3ef89bcd43a3f716d0c978e2aff00.tar.gz
bcm5719-llvm-54edccafc5e3ef89bcd43a3f716d0c978e2aff00.zip
Add support for C++0x raw string literals.
llvm-svn: 137298
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/CodeGen/string-literal.c25
-rw-r--r--clang/test/Lexer/cxx0x_raw_string_delim_length.cpp6
-rw-r--r--clang/test/Lexer/cxx0x_raw_string_unterminated.cpp8
-rw-r--r--clang/test/SemaCXX/cxx0x-type-convert-construct.cpp11
4 files changed, 49 insertions, 1 deletions
diff --git a/clang/test/CodeGen/string-literal.c b/clang/test/CodeGen/string-literal.c
index dfa609fe8a3..98216423bc4 100644
--- a/clang/test/CodeGen/string-literal.c
+++ b/clang/test/CodeGen/string-literal.c
@@ -1,6 +1,6 @@
// RUN: %clang_cc1 -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -check-prefix=C %s
// RUN: %clang_cc1 -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -check-prefix=C %s
-// RUN: %clang_cc1 -x c++ -std=c++0x -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -check-prefix=C %s
+// RUN: %clang_cc1 -x c++ -std=c++0x -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck -check-prefix=CPP0X %s
#include <stddef.h>
@@ -38,5 +38,28 @@ int main() {
// CHECK-CPP0X: private unnamed_addr constant [4 x i8] c"def\00", align 1
const char *g = u8"def";
+
+ // CHECK-CPP0X: private unnamed_addr constant [4 x i8] c"ghi\00", align 1
+ const char *h = R"foo(ghi)foo";
+
+ // CHECK-CPP0X: private unnamed_addr constant [4 x i8] c"jkl\00", align 1
+ const char *i = u8R"bar(jkl)bar";
+
+ // CHECK-CPP0X: private unnamed_addr constant [6 x i8] c"G\00H\00\00\00", align 2
+ const char16_t *j = uR"foo(GH)foo";
+
+ // CHECK-CPP0X: private unnamed_addr constant [12 x i8] c"I\00\00\00J\00\00\00\00\00\00\00", align 4
+ const char32_t *k = UR"bar(IJ)bar";
+
+ // CHECK-CPP0X: private unnamed_addr constant [12 x i8] c"K\00\00\00L\00\00\00\00\00\00\00", align 4
+ const wchar_t *l = LR"bar(KL)bar";
+
+ // CHECK-CPP0X: private unnamed_addr constant [9 x i8] c"abc\5Cndef\00", align 1
+ const char *m = R"(abc\ndef)";
+
+ // CHECK-CPP0X: private unnamed_addr constant [8 x i8] c"abc\0Adef\00", align 1
+ const char *n = R"(abc
+def)";
+
#endif
}
diff --git a/clang/test/Lexer/cxx0x_raw_string_delim_length.cpp b/clang/test/Lexer/cxx0x_raw_string_delim_length.cpp
new file mode 100644
index 00000000000..c7b32f86984
--- /dev/null
+++ b/clang/test/Lexer/cxx0x_raw_string_delim_length.cpp
@@ -0,0 +1,6 @@
+// RUN: %clang_cc1 -std=c++0x -E %s 2>&1 | grep 'error: raw string delimiter longer than 16 characters'
+
+const char *str = R"abcdefghijkmnopqrstuvwxyz(abcdef)abcdefghijkmnopqrstuvwxyz";
+// RUN: %clang_cc1 -std=c++0x -E %s 2>&1 | grep 'error: raw string delimiter longer than 16 characters'
+
+const char *str = R"abcdefghijkmnopqrstuvwxyz(abcdef)abcdefghijkmnopqrstuvwxyz";
diff --git a/clang/test/Lexer/cxx0x_raw_string_unterminated.cpp b/clang/test/Lexer/cxx0x_raw_string_unterminated.cpp
new file mode 100644
index 00000000000..7813c999f00
--- /dev/null
+++ b/clang/test/Lexer/cxx0x_raw_string_unterminated.cpp
@@ -0,0 +1,8 @@
+// RUN: %clang_cc1 -std=c++0x -E %s 2>&1 | grep 'error: raw string missing terminating delimiter )foo"'
+
+const char *str = R"foo(abc
+def)bar";
+// RUN: %clang_cc1 -std=c++0x -E %s 2>&1 | grep 'error: raw string missing terminating delimiter )foo"'
+
+const char *str = R"foo(abc
+def)bar";
diff --git a/clang/test/SemaCXX/cxx0x-type-convert-construct.cpp b/clang/test/SemaCXX/cxx0x-type-convert-construct.cpp
index a523108c6e2..f32c8e2014b 100644
--- a/clang/test/SemaCXX/cxx0x-type-convert-construct.cpp
+++ b/clang/test/SemaCXX/cxx0x-type-convert-construct.cpp
@@ -7,4 +7,15 @@ void f() {
ustr = u"a UTF-16 string"; // expected-error {{assigning to 'char16_t *' from incompatible type 'const char16_t [16]'}}
char32_t *Ustr;
Ustr = U"a UTF-32 string"; // expected-error {{assigning to 'char32_t *' from incompatible type 'const char32_t [16]'}}
+
+ char *Rstr;
+ Rstr = "a raw string"; // expected-warning{{conversion from string literal to 'char *' is deprecated}}
+ wchar_t *LRstr;
+ LRstr = LR"foo(a wide raw string)foo"; // expected-warning{{conversion from string literal to 'wchar_t *' is deprecated}}
+ char *u8Rstr;
+ u8Rstr = u8R"foo(a UTF-8 raw string)foo"; // expected-error {{assigning to 'char *' from incompatible type 'const char [19]'}}
+ char16_t *uRstr;
+ uRstr = uR"foo(a UTF-16 raw string)foo"; // expected-error {{assigning to 'char16_t *' from incompatible type 'const char16_t [20]'}}
+ char32_t *URstr;
+ URstr = UR"foo(a UTF-32 raw string)foo"; // expected-error {{assigning to 'char32_t *' from incompatible type 'const char32_t [20]'}}
}
OpenPOWER on IntegriCloud