diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/CodeGen/string-literal.c | 25 | ||||
-rw-r--r-- | test/Lexer/cxx0x_raw_string_delim_length.cpp | 6 | ||||
-rw-r--r-- | test/Lexer/cxx0x_raw_string_unterminated.cpp | 8 | ||||
-rw-r--r-- | test/SemaCXX/cxx0x-type-convert-construct.cpp | 11 |
4 files changed, 49 insertions, 1 deletions
diff --git a/test/CodeGen/string-literal.c b/test/CodeGen/string-literal.c index dfa609fe8a..98216423bc 100644 --- a/test/CodeGen/string-literal.c +++ b/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/test/Lexer/cxx0x_raw_string_delim_length.cpp b/test/Lexer/cxx0x_raw_string_delim_length.cpp new file mode 100644 index 0000000000..c7b32f8698 --- /dev/null +++ b/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/test/Lexer/cxx0x_raw_string_unterminated.cpp b/test/Lexer/cxx0x_raw_string_unterminated.cpp new file mode 100644 index 0000000000..7813c999f0 --- /dev/null +++ b/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/test/SemaCXX/cxx0x-type-convert-construct.cpp b/test/SemaCXX/cxx0x-type-convert-construct.cpp index a523108c6e..f32c8e2014 100644 --- a/test/SemaCXX/cxx0x-type-convert-construct.cpp +++ b/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]'}} } |