================ @@ -4828,18 +4830,23 @@ Sema::PerformImplicitConversion(Expr *From, QualType ToType, } case ICK_HLSL_Vector_Truncation: { // Note: HLSL built-in vectors are ExtVectors. Since this truncates a - // vector to a smaller vector, this can only operate on arguments where - // the source and destination types are ExtVectors. - assert(From->getType()->isExtVectorType() && ToType->isExtVectorType() && - "HLSL vector truncation should only apply to ExtVectors"); + // vector to a smaller vector or to a scalar, this can only operate on + // arguments where the source type is an ExtVector and the destination + // type is destination type is either an ExtVectorType or a builtin scalar + // type. auto *FromVec = From->getType()->castAs<VectorType>(); - auto *ToVec = ToType->castAs<VectorType>(); QualType ElType = FromVec->getElementType(); - QualType TruncTy = - Context.getExtVectorType(ElType, ToVec->getNumElements()); - From = ImpCastExprToType(From, TruncTy, CK_HLSLVectorTruncation, - From->getValueKind()) - .get(); + if (auto *ToVec = ToType->getAs<VectorType>()) { + QualType TruncTy = + Context.getExtVectorType(ElType, ToVec->getNumElements()); + From = ImpCastExprToType(From, TruncTy, CK_HLSLVectorTruncation, + From->getValueKind()) + .get(); + } else { + From = ImpCastExprToType(From, ElType, CK_HLSLVectorTruncation, + From->getValueKind()) + .get(); + } ---------------- llvm-beanz wrote:
I changed the naming on this because `ToType` is already used, so this caused shadowing, but otherwise I adopted this structure. 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