]> granicus.if.org Git - clang/commitdiff
Fix off-by-one error in UTF-16 encoding: don't try to use a surrogate pair for U...
authorRichard Smith <richard-llvm@metafoo.co.uk>
Wed, 13 Jun 2012 05:41:29 +0000 (05:41 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Wed, 13 Jun 2012 05:41:29 +0000 (05:41 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@158391 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Lex/LiteralSupport.cpp
test/Lexer/char-literal.cpp

index 2930d6a5ff08f3005b21e5754b1b4d0593c863db..9b0bc70345420b6a47469a66b2f0966733618938 100644 (file)
@@ -322,7 +322,7 @@ static void EncodeUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf,
     // using reinterpret_cast.
     UTF16 *ResultPtr = reinterpret_cast<UTF16*>(ResultBuf);
 
-    if (UcnVal < (UTF32)0xFFFF) {
+    if (UcnVal <= (UTF32)0xFFFF) {
       *ResultPtr = UcnVal;
       ResultBuf += 2;
       return;
index 5dc53608f8f82375ea1c848ad898e57a0360ea65..8556d468cba695d4e37dee0710eb0c408891a8be 100644 (file)
@@ -22,3 +22,6 @@ char m = '👿'; // expected-error {{character too large for enclosing character
 
 char32_t n = U'ab'; // expected-error {{Unicode character literals may not contain multiple characters}}
 char16_t o = '👽'; // expected-error {{character too large for enclosing character literal type}}
+
+char16_t p[2] = u"\U0000FFFF";
+char16_t q[2] = u"\U00010000"; // expected-error {{too long}}