[clang] [Clang] Do not warn on UTF-16 -> UTF-32 conversions. (PR #163927)
Shafik Yaghmour via cfe-commits
cfe-commits at lists.llvm.org
Sun Oct 19 20:02:20 PDT 2025
================
@@ -12309,13 +12309,20 @@ static void DiagnoseMixedUnicodeImplicitConversion(Sema &S, const Type *Source,
SourceLocation CC) {
assert(Source->isUnicodeCharacterType() && Target->isUnicodeCharacterType() &&
Source != Target);
+
+ // Lone surrogates have a distinct representation in UTF-32.
+ // Converting between UTF-16 and UTF-32 codepoints seems very widespread,
+ // so don't warn on such conversion.
+ if (Source->isChar16Type() && Target->isChar32Type())
+ return;
+
Expr::EvalResult Result;
if (E->EvaluateAsInt(Result, S.getASTContext(), Expr::SE_AllowSideEffects,
S.isConstantEvaluatedContext())) {
llvm::APSInt Value(32);
Value = Result.Val.getInt();
bool IsASCII = Value <= 0x7F;
- bool IsBMP = Value <= 0xD7FF || (Value >= 0xE000 && Value <= 0xFFFF);
+ bool IsBMP = Value <= 0xDFFF || (Value >= 0xE000 && Value <= 0xFFFF);
----------------
shafik wrote:
This change is not really explain in the summary or at least I don't get it. I guess this cover the char32 to char16 `D800` test below.
https://github.com/llvm/llvm-project/pull/163927
More information about the cfe-commits
mailing list