Skip to content

Commit f719688

Browse files
committed
Handle some infallible cases
1 parent 579a257 commit f719688

File tree

1 file changed

+117
-10
lines changed
  • library/core/src/convert

1 file changed

+117
-10
lines changed

library/core/src/convert/num.rs

+117-10
Original file line numberDiff line numberDiff line change
@@ -632,6 +632,13 @@ mod verify {
632632
let _ = NonZero::<$target>::try_from(x).unwrap();
633633
}
634634
};
635+
($source:ty => $target:ty, $harness_infallible:ident,) => {
636+
#[kani::proof]
637+
pub fn $harness_infallible() {
638+
let x: NonZero::<$source> = kani::any();
639+
let _ = NonZero::<$target>::try_from(x).unwrap();
640+
}
641+
}
635642
}
636643

637644
// unsigned non-zero integer -> unsigned non-zero integer fallible
@@ -650,11 +657,20 @@ mod verify {
650657
check_nonzero_u16_try_from_nonzero_u32,
651658
check_nonzero_u16_try_from_nonzero_u32_should_panic,
652659
);
660+
661+
#[cfg(target_pointer_width = "16")]
653662
generate_nonzero_int_try_from_nonzero_int_harness!(
654663
u32 => usize,
655664
check_nonzero_usize_try_from_nonzero_u32,
656665
check_nonzero_usize_try_from_nonzero_u32_should_panic,
657666
);
667+
668+
#[cfg(any(target_pointer_width = "32", target_pointer_width = "64"))]
669+
generate_nonzero_int_try_from_nonzero_int_harness!(
670+
u32 => usize,
671+
check_nonzero_usize_try_from_nonzero_u32_infallible,
672+
);
673+
658674
generate_nonzero_int_try_from_nonzero_int_harness!(
659675
u64 => u8,
660676
check_nonzero_u8_try_from_nonzero_u64,
@@ -670,11 +686,20 @@ mod verify {
670686
check_nonzero_u32_try_from_nonzero_u64,
671687
check_nonzero_u32_try_from_nonzero_u64_should_panic,
672688
);
689+
690+
#[cfg(any(target_pointer_width = "16", target_pointer_width = "32"))]
673691
generate_nonzero_int_try_from_nonzero_int_harness!(
674692
u64 => usize,
675693
check_nonzero_usize_try_from_nonzero_u64,
676694
check_nonzero_usize_try_from_nonzero_u64_should_panic,
677695
);
696+
697+
#[cfg(target_pointer_width = "64")]
698+
generate_nonzero_int_try_from_nonzero_int_harness!(
699+
u64 => usize,
700+
check_nonzero_usize_try_from_nonzero_u64_infallible,
701+
);
702+
678703
generate_nonzero_int_try_from_nonzero_int_harness!(
679704
u128 => u8,
680705
check_nonzero_u8_try_from_nonzero_u128,
@@ -705,25 +730,40 @@ mod verify {
705730
check_nonzero_u8_try_from_nonzero_usize,
706731
check_nonzero_u8_try_from_nonzero_usize_should_panic,
707732
);
733+
734+
#[cfg(target_pointer_width = "16")]
735+
generate_nonzero_int_try_from_nonzero_int_harness!(
736+
usize => u16,
737+
check_nonzero_u16_try_from_nonzero_usize_infallible,
738+
);
739+
740+
#[cfg(any(target_pointer_width = "32", target_pointer_width = "64"))]
708741
generate_nonzero_int_try_from_nonzero_int_harness!(
709742
usize => u16,
710743
check_nonzero_u16_try_from_nonzero_usize,
711744
check_nonzero_u16_try_from_nonzero_usize_should_panic,
712745
);
746+
747+
#[cfg(any(target_pointer_width = "16", target_pointer_width = "32"))]
748+
generate_nonzero_int_try_from_nonzero_int_harness!(
749+
usize => u32,
750+
check_nonzero_u32_try_from_nonzero_usize_infallible,
751+
);
752+
753+
#[cfg(target_pointer_width = "64")]
713754
generate_nonzero_int_try_from_nonzero_int_harness!(
714755
usize => u32,
715756
check_nonzero_u32_try_from_nonzero_usize,
716757
check_nonzero_u32_try_from_nonzero_usize_should_panic,
717758
);
759+
718760
generate_nonzero_int_try_from_nonzero_int_harness!(
719761
usize => u64,
720-
check_nonzero_u64_try_from_nonzero_usize,
721-
check_nonzero_u64_try_from_nonzero_usize_should_panic,
762+
check_nonzero_u64_try_from_nonzero_usize_infallible,
722763
);
723764
generate_nonzero_int_try_from_nonzero_int_harness!(
724765
usize => u128,
725-
check_nonzero_u128_try_from_nonzero_usize,
726-
check_nonzero_u128_try_from_nonzero_usize_should_panic,
766+
check_nonzero_u128_try_from_nonzero_usize_infallible,
727767
);
728768

729769
// signed non-zero integer -> signed non-zero integer fallible
@@ -742,11 +782,20 @@ mod verify {
742782
check_nonzero_i16_try_from_nonzero_i32,
743783
check_nonzero_i16_try_from_nonzero_i32_should_panic,
744784
);
785+
786+
#[cfg(target_pointer_width = "16")]
745787
generate_nonzero_int_try_from_nonzero_int_harness!(
746788
i32 => isize,
747789
check_nonzero_isize_try_from_nonzero_i32,
748790
check_nonzero_isize_try_from_nonzero_i32_should_panic,
749791
);
792+
793+
#[cfg(any(target_pointer_width = "32", target_pointer_width = "64"))]
794+
generate_nonzero_int_try_from_nonzero_int_harness!(
795+
i32 => isize,
796+
check_nonzero_isize_try_from_nonzero_i32_infallible,
797+
);
798+
750799
generate_nonzero_int_try_from_nonzero_int_harness!(
751800
i64 => i8,
752801
check_nonzero_i8_try_from_nonzero_i64,
@@ -762,11 +811,20 @@ mod verify {
762811
check_nonzero_i32_try_from_nonzero_i64,
763812
check_nonzero_i32_try_from_nonzero_i64_should_panic,
764813
);
814+
815+
#[cfg(any(target_pointer_width = "16", target_pointer_width = "32"))]
765816
generate_nonzero_int_try_from_nonzero_int_harness!(
766817
i64 => isize,
767818
check_nonzero_isize_try_from_nonzero_i64,
768819
check_nonzero_isize_try_from_nonzero_i64_should_panic,
769820
);
821+
822+
#[cfg(target_pointer_width = "64")]
823+
generate_nonzero_int_try_from_nonzero_int_harness!(
824+
i64 => isize,
825+
check_nonzero_isize_try_from_nonzero_i64_infallible,
826+
);
827+
770828
generate_nonzero_int_try_from_nonzero_int_harness!(
771829
i128 => i8,
772830
check_nonzero_i8_try_from_nonzero_i128,
@@ -797,25 +855,40 @@ mod verify {
797855
check_nonzero_i8_try_from_nonzero_isize,
798856
check_nonzero_i8_try_from_nonzero_isize_should_panic,
799857
);
858+
859+
#[cfg(target_pointer_width = "16")]
860+
generate_nonzero_int_try_from_nonzero_int_harness!(
861+
isize => i16,
862+
check_nonzero_i16_try_from_nonzero_isize_infallible,
863+
);
864+
865+
#[cfg(any(target_pointer_width = "32", target_pointer_width = "64"))]
800866
generate_nonzero_int_try_from_nonzero_int_harness!(
801867
isize => i16,
802868
check_nonzero_i16_try_from_nonzero_isize,
803869
check_nonzero_i16_try_from_nonzero_isize_should_panic,
804870
);
871+
872+
#[cfg(any(target_pointer_width = "16", target_pointer_width = "32"))]
873+
generate_nonzero_int_try_from_nonzero_int_harness!(
874+
isize => i32,
875+
check_nonzero_i32_try_from_nonzero_isize_infallible,
876+
);
877+
878+
#[cfg(target_pointer_width = "64")]
805879
generate_nonzero_int_try_from_nonzero_int_harness!(
806880
isize => i32,
807881
check_nonzero_i32_try_from_nonzero_isize,
808882
check_nonzero_i32_try_from_nonzero_isize_should_panic,
809883
);
884+
810885
generate_nonzero_int_try_from_nonzero_int_harness!(
811886
isize => i64,
812-
check_nonzero_i64_try_from_nonzero_isize,
813-
check_nonzero_i64_try_from_nonzero_isize_should_panic,
887+
check_nonzero_i64_try_from_nonzero_isize_infallible,
814888
);
815889
generate_nonzero_int_try_from_nonzero_int_harness!(
816890
isize => i128,
817-
check_nonzero_i128_try_from_nonzero_isize,
818-
check_nonzero_i128_try_from_nonzero_isize_should_panic,
891+
check_nonzero_i128_try_from_nonzero_isize_infallible,
819892
);
820893

821894
// unsigned non-zero integer -> signed non-zero integer fallible
@@ -834,11 +907,20 @@ mod verify {
834907
check_nonzero_i16_try_from_nonzero_u16,
835908
check_nonzero_i16_try_from_nonzero_u16_should_panic,
836909
);
910+
911+
#[cfg(target_pointer_width = "16")]
837912
generate_nonzero_int_try_from_nonzero_int_harness!(
838913
u16 => isize,
839914
check_nonzero_isize_try_from_nonzero_u16,
840915
check_nonzero_isize_try_from_nonzero_u16_should_panic,
841916
);
917+
918+
#[cfg(any(target_pointer_width = "32", target_pointer_width = "64"))]
919+
generate_nonzero_int_try_from_nonzero_int_harness!(
920+
u16 => isize,
921+
check_nonzero_isize_try_from_nonzero_u16_infallible,
922+
);
923+
842924
generate_nonzero_int_try_from_nonzero_int_harness!(
843925
u32 => i8,
844926
check_nonzero_i8_try_from_nonzero_u32,
@@ -854,11 +936,20 @@ mod verify {
854936
check_nonzero_i32_try_from_nonzero_u32,
855937
check_nonzero_i32_try_from_nonzero_u32_should_panic,
856938
);
939+
940+
#[cfg(any(target_pointer_width = "16", target_pointer_width = "32"))]
857941
generate_nonzero_int_try_from_nonzero_int_harness!(
858942
u32 => isize,
859943
check_nonzero_isize_try_from_nonzero_u32,
860944
check_nonzero_isize_try_from_nonzero_u32_should_panic,
861945
);
946+
947+
#[cfg(target_pointer_width = "64")]
948+
generate_nonzero_int_try_from_nonzero_int_harness!(
949+
u32 => isize,
950+
check_nonzero_isize_try_from_nonzero_u32_infallible,
951+
);
952+
862953
generate_nonzero_int_try_from_nonzero_int_harness!(
863954
u64 => i8,
864955
check_nonzero_i8_try_from_nonzero_u64,
@@ -924,20 +1015,36 @@ mod verify {
9241015
check_nonzero_i16_try_from_nonzero_usize,
9251016
check_nonzero_i16_try_from_nonzero_usize_should_panic,
9261017
);
1018+
1019+
#[cfg(target_pointer_width = "16")]
1020+
generate_nonzero_int_try_from_nonzero_int_harness!(
1021+
usize => i32,
1022+
check_nonzero_i32_try_from_nonzero_usize_infallible,
1023+
);
1024+
1025+
#[cfg(any(target_pointer_width = "32", target_pointer_width = "64"))]
9271026
generate_nonzero_int_try_from_nonzero_int_harness!(
9281027
usize => i32,
9291028
check_nonzero_i32_try_from_nonzero_usize,
9301029
check_nonzero_i32_try_from_nonzero_usize_should_panic,
9311030
);
1031+
1032+
#[cfg(any(target_pointer_width = "16", target_pointer_width = "32"))]
1033+
generate_nonzero_int_try_from_nonzero_int_harness!(
1034+
usize => i64,
1035+
check_nonzero_i64_try_from_nonzero_usize_infallible,
1036+
);
1037+
1038+
#[cfg(target_pointer_width = "64")]
9321039
generate_nonzero_int_try_from_nonzero_int_harness!(
9331040
usize => i64,
9341041
check_nonzero_i64_try_from_nonzero_usize,
9351042
check_nonzero_i64_try_from_nonzero_usize_should_panic,
9361043
);
1044+
9371045
generate_nonzero_int_try_from_nonzero_int_harness!(
9381046
usize => i128,
939-
check_nonzero_i128_try_from_nonzero_usize,
940-
check_nonzero_i128_try_from_nonzero_usize_should_panic,
1047+
check_nonzero_i128_try_from_nonzero_usize_infallible,
9411048
);
9421049
generate_nonzero_int_try_from_nonzero_int_harness!(
9431050
usize => isize,

0 commit comments

Comments
 (0)