@@ -4368,7 +4368,7 @@ mod verify {
43684368
43694369 // --- into_boxed_slice ---
43704370 #[ kani:: proof]
4371- # [ kani :: unwind ( 8 ) ]
4371+
43724372 fn check_into_boxed_slice( ) {
43734373 let v: Vec <$ty> = any_vec:: <$ty, MAX_LEN >( ) ;
43744374 let len = v. len( ) ;
@@ -4378,7 +4378,7 @@ mod verify {
43784378
43794379 // --- truncate ---
43804380 #[ kani:: proof]
4381- # [ kani :: unwind ( 8 ) ]
4381+
43824382 fn check_truncate( ) {
43834383 let mut v: Vec <$ty> = any_vec:: <$ty, MAX_LEN >( ) ;
43844384 let orig_len = v. len( ) ;
@@ -4418,7 +4418,7 @@ mod verify {
44184418
44194419 // --- insert ---
44204420 #[ kani:: proof]
4421- # [ kani :: unwind ( 8 ) ]
4421+
44224422 fn check_insert( ) {
44234423 let mut v: Vec <$ty> = any_vec:: <$ty, MAX_LEN >( ) ;
44244424 let orig_len = v. len( ) ;
@@ -4431,7 +4431,7 @@ mod verify {
44314431
44324432 // --- remove ---
44334433 #[ kani:: proof]
4434- # [ kani :: unwind ( 8 ) ]
4434+
44354435 fn check_remove( ) {
44364436 let mut v: Vec <$ty> = any_vec_with_min_len:: <$ty, MAX_LEN >( 1 ) ;
44374437 let orig_len = v. len( ) ;
@@ -4443,7 +4443,7 @@ mod verify {
44434443
44444444 // --- retain_mut ---
44454445 #[ kani:: proof]
4446- # [ kani :: unwind ( 8 ) ]
4446+
44474447 fn check_retain_mut( ) {
44484448 let mut v: Vec <$ty> = any_vec:: <$ty, MAX_LEN >( ) ;
44494449 let orig_len = v. len( ) ;
@@ -4453,7 +4453,7 @@ mod verify {
44534453
44544454 // --- dedup_by ---
44554455 #[ kani:: proof]
4456- # [ kani :: unwind ( 8 ) ]
4456+
44574457 fn check_dedup_by( ) {
44584458 let mut v: Vec <$ty> = any_vec:: <$ty, MAX_LEN >( ) ;
44594459 let orig_len = v. len( ) ;
@@ -4504,7 +4504,7 @@ mod verify {
45044504
45054505 // --- append ---
45064506 #[ kani:: proof]
4507- # [ kani :: unwind ( 8 ) ]
4507+
45084508 fn check_append( ) {
45094509 let mut v1: Vec <$ty> = any_vec:: <$ty, MAX_LEN >( ) ;
45104510 let mut v2: Vec <$ty> = any_vec:: <$ty, MAX_LEN >( ) ;
@@ -4519,7 +4519,7 @@ mod verify {
45194519 // Verified transitively through check_append above.
45204520 // Also verify directly:
45214521 #[ kani:: proof]
4522- # [ kani :: unwind ( 8 ) ]
4522+
45234523 fn check_append_elements( ) {
45244524 let mut v: Vec <$ty> = any_vec:: <$ty, MAX_LEN >( ) ;
45254525 let other: Vec <$ty> = any_vec:: <$ty, MAX_LEN >( ) ;
@@ -4535,7 +4535,7 @@ mod verify {
45354535
45364536 // --- drain ---
45374537 #[ kani:: proof]
4538- # [ kani :: unwind ( 8 ) ]
4538+
45394539 fn check_drain( ) {
45404540 let mut v: Vec <$ty> = any_vec:: <$ty, MAX_LEN >( ) ;
45414541 let len = v. len( ) ;
@@ -4558,7 +4558,7 @@ mod verify {
45584558
45594559 // --- split_off ---
45604560 #[ kani:: proof]
4561- # [ kani :: unwind ( 8 ) ]
4561+
45624562 fn check_split_off( ) {
45634563 let mut v: Vec <$ty> = any_vec:: <$ty, MAX_LEN >( ) ;
45644564 let len = v. len( ) ;
@@ -4604,7 +4604,7 @@ mod verify {
46044604
46054605 // --- extend_from_within ---
46064606 #[ kani:: proof]
4607- # [ kani :: unwind ( 8 ) ]
4607+
46084608 fn check_extend_from_within( ) {
46094609 let mut v: Vec <$ty> = any_vec:: <$ty, MAX_LEN >( ) ;
46104610 let len = v. len( ) ;
@@ -4618,7 +4618,7 @@ mod verify {
46184618
46194619 // --- into_flattened ---
46204620 #[ kani:: proof]
4621- # [ kani :: unwind ( 8 ) ]
4621+
46224622 fn check_into_flattened( ) {
46234623 let arr: [ [ $ty; 1 ] ; MAX_LEN ] = kani:: Arbitrary :: any_array( ) ;
46244624 let v: Vec <[ $ty; 1 ] > = Vec :: from( arr) ;
@@ -4629,7 +4629,7 @@ mod verify {
46294629
46304630 // --- extend_with (private, called by resize) ---
46314631 #[ kani:: proof]
4632- # [ kani :: unwind ( 8 ) ]
4632+
46334633 fn check_extend_with( ) {
46344634 let mut v: Vec <$ty> = any_vec:: <$ty, MAX_LEN >( ) ;
46354635 let orig_len = v. len( ) ;
@@ -4674,7 +4674,7 @@ mod verify {
46744674 // --- extend_desugared (private) ---
46754675 // This is the default extend impl. Verify through Extend trait:
46764676 #[ kani:: proof]
4677- # [ kani :: unwind ( 8 ) ]
4677+
46784678 fn check_extend_desugared( ) {
46794679 let mut v: Vec <$ty> = any_vec:: <$ty, MAX_LEN >( ) ;
46804680 let orig_len = v. len( ) ;
@@ -4687,7 +4687,7 @@ mod verify {
46874687 // Called when extending with a TrustedLen iterator.
46884688 // Vec::from(arr) uses this path. Also verify through extend:
46894689 #[ kani:: proof]
4690- # [ kani :: unwind ( 8 ) ]
4690+
46914691 fn check_extend_trusted( ) {
46924692 let mut v: Vec <$ty> = any_vec:: <$ty, MAX_LEN >( ) ;
46934693 let orig_len = v. len( ) ;
@@ -4699,7 +4699,7 @@ mod verify {
46994699
47004700 // --- extract_if ---
47014701 #[ kani:: proof]
4702- # [ kani :: unwind ( 8 ) ]
4702+
47034703 fn check_extract_if( ) {
47044704 let mut v: Vec <$ty> = any_vec:: <$ty, MAX_LEN >( ) ;
47054705 let orig_len = v. len( ) ;
@@ -4709,7 +4709,7 @@ mod verify {
47094709
47104710 // --- drop ---
47114711 #[ kani:: proof]
4712- # [ kani :: unwind ( 8 ) ]
4712+
47134713 fn check_drop( ) {
47144714 let v: Vec <$ty> = any_vec:: <$ty, MAX_LEN >( ) ;
47154715 drop( v) ;
@@ -4731,9 +4731,12 @@ mod verify {
47314731 } ;
47324732 }
47334733
4734- // Representative types covering: ZST, small aligned, validity-constrained,
4735- // compound with padding. MAX_LEN=5 keeps verification tractable while
4736- // exercising all code paths.
4734+ // Representative types covering: ZST (size 0), small aligned (size 1),
4735+ // validity-constrained (size 4), compound with padding (size 5+).
4736+ // The unsafe pointer operations depend only on size_of::<T>() and
4737+ // align_of::<T>(), so these cover all relevant layout categories.
4738+ // MAX_LEN=3 allows CBMC to fully unwind all loops without explicit
4739+ // unwind bounds, while covering empty/single/multiple element cases.
47374740 check_vec_with_ty ! ( verify_vec_u8, u8 , 3 ) ;
47384741 check_vec_with_ty ! ( verify_vec_unit, ( ) , 3 ) ;
47394742 check_vec_with_ty ! ( verify_vec_char, char , 3 ) ;
0 commit comments