From 76438f032a1dd57e624f326f126b639f1c2a7e68 Mon Sep 17 00:00:00 2001 From: Jamie Hill-Daniel Date: Thu, 14 Aug 2025 13:32:31 +0000 Subject: [PATCH] Add codegen test for issue 138497 --- ...sue-138497-nonzero-remove-trailing-zeroes.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 tests/codegen-llvm/issues/issue-138497-nonzero-remove-trailing-zeroes.rs diff --git a/tests/codegen-llvm/issues/issue-138497-nonzero-remove-trailing-zeroes.rs b/tests/codegen-llvm/issues/issue-138497-nonzero-remove-trailing-zeroes.rs new file mode 100644 index 000000000000..77cdbaf2bfe5 --- /dev/null +++ b/tests/codegen-llvm/issues/issue-138497-nonzero-remove-trailing-zeroes.rs @@ -0,0 +1,17 @@ +//! This test checks that removing trailing zeroes from a `NonZero`, +//! then creating a new `NonZero` from the result does not panic. + +//@ min-llvm-version: 21 +//@ compile-flags: -O -Zmerge-functions=disabled +#![crate_type = "lib"] + +use std::num::NonZero; + +// CHECK-LABEL: @remove_trailing_zeros +#[no_mangle] +pub fn remove_trailing_zeros(x: NonZero) -> NonZero { + // CHECK: %[[TRAILING:[a-z0-9_-]+]] = {{.*}} call {{.*}} i8 @llvm.cttz.i8(i8 %x, i1 true) + // CHECK-NEXT: %[[RET:[a-z0-9_-]+]] = lshr exact i8 %x, %[[TRAILING]] + // CHECK-NEXT: ret i8 %[[RET]] + NonZero::new(x.get() >> x.trailing_zeros()).unwrap() +}