From: Richard Smith Date: Mon, 2 Jan 2012 18:14:06 +0000 (+0000) Subject: Add assertion to char32_t that the value is valid, as suggested by Jordy Rose. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a2d8669b09363d3d3a3c67982e08a38c8ed015d0;p=clang 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 --- 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}}