[clang] [llvm] Enable fexec-charset option (PR #138895)

Abhina Sree via cfe-commits cfe-commits at lists.llvm.org
Mon Jun 8 11:49:22 PDT 2026


================
@@ -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();
+            }
----------------
abhina-sree wrote:

Please see the latest commit, I removed the conversion from utf32 to utf8 but I added another for loop to copy the converted string, character by character

https://github.com/llvm/llvm-project/pull/138895


More information about the cfe-commits mailing list