================
@@ -1854,23 +1892,60 @@ CharLiteralParser::CharLiteralParser(const char *begin, 
const char *end,
             HadError = true;
             PP.Diag(Loc, diag::err_character_too_large);
           }
+          if (!HadError && Converter) {
+            assert(isOrdinary() && "Only ordinary characters are supported");
+            std::string UTF8String;
+            convertUTF32ToUTF8String(
+                ArrayRef<char>(reinterpret_cast<const char *>(tmp_out_start),
+                               4),
+                UTF8String);
+            auto ErrorOrChar = convertCharacter(UTF8String, *Converter);
+            if (ErrorOrChar) {
+              *tmp_out_start = *ErrorOrChar;
+            } else {
+              HadError = true;
+              PP.Diag(Loc, diag::err_exec_charset_conversion_failed)
+                  << ErrorOrChar.getError().message();
+            }
----------------
s-barannikov wrote:

Sounds like a good idea.
Maybe we can avoid converting to UTF-32 entirely and directly convert UTF-8 to 
exec encoding? Not required in this PR.


https://github.com/llvm/llvm-project/pull/138895
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to