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

Sergei Barannikov via cfe-commits cfe-commits at lists.llvm.org
Thu Apr 30 07:51:13 PDT 2026


================
@@ -2239,24 +2321,32 @@ void StringLiteralParser::init(ArrayRef<Token> StringToks){
 
           // Copy the character span over.
           if (CopyStringFragment(StringToks[i], ThisTokBegin,
-                                 StringRef(InStart, ThisTokBuf - InStart)))
+                                 StringRef(InStart, ThisTokBuf - InStart),
+                                 Converter))
             hadError = true;
           continue;
         }
         // Is this a Universal Character Name escape?
         if (ThisTokBuf[1] == 'u' || ThisTokBuf[1] == 'U' ||
             ThisTokBuf[1] == 'N') {
-          EncodeUCNEscape(ThisTokBegin, ThisTokBuf, ThisTokEnd,
-                          ResultPtr, hadError,
+          char *Cp = ResultPtr;
+          EncodeUCNEscape(ThisTokBegin, ThisTokBuf, ThisTokEnd, ResultPtr,
+                          hadError,
                           FullSourceLoc(StringToks[i].getLocation(), SM),
                           CharByteWidth, Diags, Features);
+          if (!hadError && Converter) {
+            SmallString<8> CpConv;
+            Converter->convert(StringRef(Cp), CpConv);
+            memcpy(Cp, CpConv.data(), CpConv.size());
+            ResultPtr = Cp + CpConv.size();
+          }
----------------
s-barannikov wrote:

Likewise, this conversion should happen inside EncodeUCNEscape, ideally avoiding intermediate conversion to UTF-8.


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


More information about the cfe-commits mailing list