diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2012-01-02 18:14:06 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2012-01-02 18:14:06 +0000 |
commit | a2d8669b09363d3d3a3c67982e08a38c8ed015d0 (patch) | |
tree | dbc3cac45bf96ffce36739bbfec8e2ca932f9897 | |
parent | d07cc36c71558b62889691184dd04655a33fd12a (diff) |
Add assertion to char32_t that the value is valid, as suggested by Jordy Rose.
Add a test that such characters don't make it through to StringLiteral objects
in error recovery.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@147438 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/AST/StmtPrinter.cpp | 2 | ||||
-rw-r--r-- | test/SemaCXX/constexpr-printing.cpp | 6 |
2 files changed, 5 insertions, 3 deletions
diff --git a/lib/AST/StmtPrinter.cpp b/lib/AST/StmtPrinter.cpp index 6408c879fa..836f192aeb 100644 --- a/lib/AST/StmtPrinter.cpp +++ b/lib/AST/StmtPrinter.cpp @@ -717,7 +717,7 @@ void StmtPrinter::VisitStringLiteral(StringLiteral *Str) { default: // FIXME: Is this the best way to print wchar_t? if (Char > 0xff) { - // char32_t values are <= 0x10ffff. + assert(Char <= 0x10ffff && "invalid unicode codepoint"); if (Char > 0xffff) OS << "\\U00" << Hex[(Char >> 20) & 15] diff --git a/test/SemaCXX/constexpr-printing.cpp b/test/SemaCXX/constexpr-printing.cpp index a648fab42e..03768c09fb 100644 --- a/test/SemaCXX/constexpr-printing.cpp +++ b/test/SemaCXX/constexpr-printing.cpp @@ -83,7 +83,9 @@ constexpr char c8 = get(u8"test\0\\\"\t\a\b\234"); // \ expected-error {{}} expected-note {{u8"test\000\\\"\t\a\b\234"}} constexpr char16_t c16 = get(u"test\0\\\"\t\a\b\234\u1234"); // \ expected-error {{}} expected-note {{u"test\000\\\"\t\a\b\234\u1234"}} -constexpr char32_t c32 = get(U"test\0\\\"\t\a\b\234\u1234\U00101234"); // \ - expected-error {{}} expected-note {{U"test\000\\\"\t\a\b\234\u1234\U00101234"}} +constexpr char32_t c32 = get(U"test\0\\\"\t\a\b\234\u1234\U0010ffff"); // \ + expected-error {{}} expected-note {{U"test\000\\\"\t\a\b\234\u1234\U0010FFFF"}} constexpr wchar_t wc = get(L"test\0\\\"\t\a\b\234\u1234"); // \ expected-error {{}} expected-note {{L"test\000\\\"\t\a\b\234\u1234"}} + +constexpr char32_t c32_err = get(U"\U00110000"); // expected-error {{invalid universal character}} |