================ @@ -2032,26 +2032,42 @@ static bool IsVectorConversion(Sema &S, QualType FromType, QualType ToType, if (S.Context.hasSameUnqualifiedType(FromType, ToType)) return false; + // HLSL allows implicit truncation of vector types. + if (S.getLangOpts().HLSL) { + auto *ToExtType = ToType->getAs<ExtVectorType>(); + auto *FromExtType = FromType->getAs<ExtVectorType>(); + + // If both arguments are vectors, handle possible vector truncation and + // element conversion. + if (ToExtType && FromExtType) { + unsigned FromElts = FromExtType->getNumElements(); + unsigned ToElts = ToExtType->getNumElements(); + if (FromElts < ToElts) + return false; + if (FromElts == ToElts) + ElConv = ICK_Identity; + else + ElConv = ICK_HLSL_Vector_Truncation; + + QualType FromElTy = FromExtType->getElementType(); + QualType ToElTy = ToExtType->getElementType(); + if (S.Context.hasSameUnqualifiedType(FromElTy, ToElTy)) + return true; + return IsVectorElementConversion(S, FromElTy, ToElTy, ICK, From); + } + if (FromExtType && nullptr == ToExtType) { ---------------- llvm-beanz wrote:
Yoda conditions are a shockingly hard habit to break... https://github.com/llvm/llvm-project/pull/104844 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits