From b138e3f4b64e8f096c30d200dbafc701f0da6356 Mon Sep 17 00:00:00 2001 From: Julius Ikkala Date: Thu, 17 Jul 2025 11:46:12 +0300 Subject: Fix BitCast emitting bit shifts with too small integer types (#7792) Co-authored-by: Yong He --- source/slang/slang-ir-extract-value-from-type.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'source') diff --git a/source/slang/slang-ir-extract-value-from-type.cpp b/source/slang/slang-ir-extract-value-from-type.cpp index 8f72c1623..1e70a28c9 100644 --- a/source/slang/slang-ir-extract-value-from-type.cpp +++ b/source/slang/slang-ir-extract-value-from-type.cpp @@ -331,12 +331,21 @@ IRInst* extractMultiByteValueAtOffset( src, restSize, offset + firstHalfSize); + + auto resultType = builder.getUIntType(); + if (size > 4) + { + resultType = builder.getUInt64Type(); + firstHalf = builder.emitCast(resultType, firstHalf); + secondHalf = builder.emitCast(resultType, secondHalf); + } + uint32_t shift = firstHalfSize * 8; auto resultValue = builder.emitBitOr( - builder.getUIntType(), + resultType, firstHalf, builder.emitShl( - builder.getUIntType(), + resultType, secondHalf, builder.getIntValue(builder.getUIntType(), shift))); return resultValue; -- cgit v1.2.3