11//! This test checks that compiler don't generate useless compares to zeros
2- //! for NonZero integer types.
3-
2+ //! for ` NonZero` integer types.
3+ //!
44//@ compile-flags: -O --edition=2021 -Zmerge-functions=disabled
55//@ only-64bit (because the LLVM type of i64 for usize shows up)
6-
76#![ crate_type = "lib" ]
7+ #![ feature( generic_nonzero) ]
88
9- use core:: num:: * ;
109use core:: ptr:: NonNull ;
10+ use core:: num:: NonZero ;
1111
1212// CHECK-LABEL: @check_non_null
1313#[ no_mangle]
@@ -18,7 +18,7 @@ pub fn check_non_null(x: NonNull<u8>) -> bool {
1818
1919// CHECK-LABEL: @equals_zero_is_false_u8
2020#[ no_mangle]
21- pub fn equals_zero_is_false_u8 ( x : NonZeroU8 ) -> bool {
21+ pub fn equals_zero_is_false_u8 ( x : NonZero < u8 > ) -> bool {
2222 // CHECK-NOT: br
2323 // CHECK: ret i1 false
2424 // CHECK-NOT: br
@@ -27,7 +27,7 @@ pub fn equals_zero_is_false_u8(x: NonZeroU8) -> bool {
2727
2828// CHECK-LABEL: @not_equals_zero_is_true_u8
2929#[ no_mangle]
30- pub fn not_equals_zero_is_true_u8 ( x : NonZeroU8 ) -> bool {
30+ pub fn not_equals_zero_is_true_u8 ( x : NonZero < u8 > ) -> bool {
3131 // CHECK-NOT: br
3232 // CHECK: ret i1 true
3333 // CHECK-NOT: br
@@ -36,7 +36,7 @@ pub fn not_equals_zero_is_true_u8(x: NonZeroU8) -> bool {
3636
3737// CHECK-LABEL: @equals_zero_is_false_i8
3838#[ no_mangle]
39- pub fn equals_zero_is_false_i8 ( x : NonZeroI8 ) -> bool {
39+ pub fn equals_zero_is_false_i8 ( x : NonZero < i8 > ) -> bool {
4040 // CHECK-NOT: br
4141 // CHECK: ret i1 false
4242 // CHECK-NOT: br
@@ -45,7 +45,7 @@ pub fn equals_zero_is_false_i8(x: NonZeroI8) -> bool {
4545
4646// CHECK-LABEL: @not_equals_zero_is_true_i8
4747#[ no_mangle]
48- pub fn not_equals_zero_is_true_i8 ( x : NonZeroI8 ) -> bool {
48+ pub fn not_equals_zero_is_true_i8 ( x : NonZero < i8 > ) -> bool {
4949 // CHECK-NOT: br
5050 // CHECK: ret i1 true
5151 // CHECK-NOT: br
@@ -54,7 +54,7 @@ pub fn not_equals_zero_is_true_i8(x: NonZeroI8) -> bool {
5454
5555// CHECK-LABEL: @usize_try_from_u32
5656#[ no_mangle]
57- pub fn usize_try_from_u32 ( x : NonZeroU32 ) -> NonZeroUsize {
57+ pub fn usize_try_from_u32 ( x : NonZero < u32 > ) -> NonZero < usize > {
5858 // CHECK-NOT: br
5959 // CHECK: zext i32 %{{.*}} to i64
6060 // CHECK-NOT: br
@@ -64,7 +64,7 @@ pub fn usize_try_from_u32(x: NonZeroU32) -> NonZeroUsize {
6464
6565// CHECK-LABEL: @isize_try_from_i32
6666#[ no_mangle]
67- pub fn isize_try_from_i32 ( x : NonZeroI32 ) -> NonZeroIsize {
67+ pub fn isize_try_from_i32 ( x : NonZero < i32 > ) -> NonZero < isize > {
6868 // CHECK-NOT: br
6969 // CHECK: sext i32 %{{.*}} to i64
7070 // CHECK-NOT: br
@@ -74,7 +74,7 @@ pub fn isize_try_from_i32(x: NonZeroI32) -> NonZeroIsize {
7474
7575// CHECK-LABEL: @u64_from_nonzero_is_not_zero
7676#[ no_mangle]
77- pub fn u64_from_nonzero_is_not_zero ( x : NonZeroU64 ) ->bool {
77+ pub fn u64_from_nonzero_is_not_zero ( x : NonZero < u64 > ) ->bool {
7878 // CHECK-NOT: br
7979 // CHECK: ret i1 false
8080 // CHECK-NOT: br
0 commit comments