Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/mir/eval/shim.rs')
-rw-r--r--crates/hir-ty/src/mir/eval/shim.rs4
1 files changed, 3 insertions, 1 deletions
diff --git a/crates/hir-ty/src/mir/eval/shim.rs b/crates/hir-ty/src/mir/eval/shim.rs
index b59d6c1cfb..7a6cbb8ca3 100644
--- a/crates/hir-ty/src/mir/eval/shim.rs
+++ b/crates/hir-ty/src/mir/eval/shim.rs
@@ -1100,7 +1100,9 @@ impl<'a, 'db: 'a> Evaluator<'a, 'db> {
let [arg] = args else {
return Err(MirEvalError::InternalError("cttz arg is not provided".into()));
};
- let result = u128::from_le_bytes(pad16(arg.get(self)?, false)).trailing_zeros();
+ let arg: &[u8] = arg.get(self)?;
+ let bit_count = arg.len() as u32 * 8;
+ let result = u128::from_le_bytes(pad16(arg, false)).trailing_zeros().min(bit_count);
destination
.write_from_bytes(self, &(result as u128).to_le_bytes()[0..destination.size])
}