================ @@ -11810,6 +11811,46 @@ static void DiagnoseIntInBoolContext(Sema &S, Expr *E) { } } +static void DiagnoseMixedUnicodeImplicitConversion(Sema &S, const Type *Source, + const Type *Target, Expr *E, + QualType T, + SourceLocation CC) { + assert(Source->isUnicodeCharacterType() && Target->isUnicodeCharacterType() && + Source != Target); + 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 ConversionPreservesSemantics = + IsASCII || (!Source->isChar8Type() && !Target->isChar8Type() && IsBMP); + + if (!ConversionPreservesSemantics) { + auto IsSingleCodeUnitCP = [](const QualType &T, + const llvm::APSInt &Value) { + if (T->isChar8Type()) + return llvm::IsSingleCodeUnitUTF8Codepoint(Value.getExtValue()); + if (T->isChar16Type()) + return llvm::IsSingleCodeUnitUTF16Codepoint(Value.getExtValue()); + return llvm::IsSingleCodeUnitUTF32Codepoint(Value.getExtValue()); ---------------- tahonermann wrote:
```suggestion assert(T->isChar32Type()); return llvm::IsSingleCodeUnitUTF32Codepoint(Value.getExtValue()); ``` https://github.com/llvm/llvm-project/pull/138708 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits