Skip to content

Commit 308f6a1

Browse files
committed
Revert "Use autoharness for convert::num::<impl convert::From<num::nonzero::NonZero<*>> for num::nonzero::NonZero<*>>::from"
This reverts commit bc70538.
1 parent 7798495 commit 308f6a1

File tree

2 files changed

+68
-1
lines changed

2 files changed

+68
-1
lines changed

.github/workflows/kani.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@ jobs:
8282
--include-pattern alloc::layout::Layout::from_size_align \
8383
--include-pattern ascii::ascii_char::AsciiChar::from_u8 \
8484
--include-pattern char::convert::from_u32_unchecked \
85-
--include-pattern "convert::num::<impl convert::From<num::nonzero::NonZero<" \
8685
--include-pattern "num::<impl i8>::unchecked_add" \
8786
--include-pattern "num::<impl i16>::unchecked_add" \
8887
--include-pattern "num::<impl i32>::unchecked_add" \

library/core/src/convert/num.rs

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -601,6 +601,74 @@ impl_nonzero_int_try_from_nonzero_int!(isize => u8, u16, u32, u64, u128, usize);
601601
mod verify {
602602
use super::*;
603603

604+
// Generate harnesses for `NonZero::<Large>::from(NonZero<Small>)`.
605+
macro_rules! generate_nonzero_int_from_nonzero_int_harness {
606+
($Small:ty => $Large:ty, $harness:ident) => {
607+
#[kani::proof]
608+
pub fn $harness() {
609+
let x: NonZero<$Small> = kani::any();
610+
let _ = NonZero::<$Large>::from(x);
611+
}
612+
};
613+
}
614+
615+
// This bundles the calls to `generate_nonzero_int_from_nonzero_int_harness`
616+
// macro into segregated namespaces for better organization and usability.
617+
macro_rules! generate_nonzero_int_from_nonzero_int_harnesses {
618+
($ns:ident, $Small:ty => $($Large:tt),+ $(,)?) => {
619+
mod $ns {
620+
use super::*;
621+
622+
$(
623+
mod $Large {
624+
use super::*;
625+
626+
generate_nonzero_int_from_nonzero_int_harness!(
627+
$Small => $Large,
628+
check_nonzero_int_from_nonzero_int
629+
);
630+
}
631+
)+
632+
}
633+
};
634+
}
635+
636+
// non-zero unsigned integer -> non-zero integer, infallible
637+
generate_nonzero_int_from_nonzero_int_harnesses!(
638+
check_nonzero_int_from_u8,
639+
u8 => u16, u32, u64, u128, usize, i16, i32, i64, i128, isize,
640+
);
641+
generate_nonzero_int_from_nonzero_int_harnesses!(
642+
check_nonzero_int_from_u16,
643+
u16 => u32, u64, u128, usize, i32, i64, i128,
644+
);
645+
generate_nonzero_int_from_nonzero_int_harnesses!(
646+
check_nonzero_int_from_u32,
647+
u32 => u64, u128, i64, i128,
648+
);
649+
generate_nonzero_int_from_nonzero_int_harnesses!(
650+
check_nonzero_int_from_u64,
651+
u64 => u128, i128,
652+
);
653+
654+
// non-zero signed integer -> non-zero signed integer, infallible
655+
generate_nonzero_int_from_nonzero_int_harnesses!(
656+
check_nonzero_int_from_i8,
657+
i8 => i16, i32, i64, i128, isize,
658+
);
659+
generate_nonzero_int_from_nonzero_int_harnesses!(
660+
check_nonzero_int_from_i16,
661+
i16 => i32, i64, i128, isize,
662+
);
663+
generate_nonzero_int_from_nonzero_int_harnesses!(
664+
check_nonzero_int_from_i32,
665+
i32 => i64, i128,
666+
);
667+
generate_nonzero_int_from_nonzero_int_harnesses!(
668+
check_nonzero_int_from_i64,
669+
i64 => i128,
670+
);
671+
604672
// Generates harnesses for `NonZero::<target>::try_from(NonZero<source>)`.
605673
// Since the function may be fallible or infallible depending on `source` and `target`,
606674
// this macro supports generating both cases.

0 commit comments

Comments
 (0)