@@ -112,6 +112,7 @@ impl Alignment {
112
112
#[ rustc_const_unstable( feature = "ptr_alignment_type" , issue = "102070" ) ]
113
113
#[ inline]
114
114
#[ ensures( |result| result. get( ) . is_power_of_two( ) ) ]
115
+ #[ ensures( |result| result. get( ) == self . as_usize( ) ) ]
115
116
pub const fn as_nonzero ( self ) -> NonZero < usize > {
116
117
// SAFETY: All the discriminants are non-zero.
117
118
unsafe { NonZero :: new_unchecked ( self . as_usize ( ) ) }
@@ -135,6 +136,7 @@ impl Alignment {
135
136
#[ inline]
136
137
#[ requires( self . as_usize( ) . is_power_of_two( ) ) ]
137
138
#[ ensures( |result| ( * result as usize ) < mem:: size_of:: <usize >( ) * 8 ) ]
139
+ #[ ensures( |result| 1usize << * result == self . as_usize( ) ) ]
138
140
pub const fn log2 ( self ) -> u32 {
139
141
self . as_nonzero ( ) . trailing_zeros ( )
140
142
}
@@ -167,6 +169,7 @@ impl Alignment {
167
169
#[ inline]
168
170
#[ ensures( |result| * result > 0 ) ]
169
171
#[ ensures( |result| * result == !( self . as_usize( ) -1 ) ) ]
172
+ #[ ensures( |result| self . as_usize( ) & * result == self . as_usize( ) ) ]
170
173
pub const fn mask ( self ) -> usize {
171
174
// SAFETY: The alignment is always nonzero, and therefore decrementing won't overflow.
172
175
!( unsafe { self . as_usize ( ) . unchecked_sub ( 1 ) } )
@@ -396,21 +399,15 @@ mod verify {
396
399
#[ kani:: proof_for_contract( Alignment :: new) ]
397
400
pub fn check_new ( ) {
398
401
let a = kani:: any :: < usize > ( ) ;
399
- let alignment_opt = Alignment :: new ( a) ;
400
- match alignment_opt {
401
- Some ( alignment) => assert_eq ! ( alignment. as_usize( ) , a) ,
402
- None => assert ! ( !a. is_power_of_two( ) )
403
- }
402
+ let _ = Alignment :: new ( a) ;
404
403
}
405
404
406
405
// pub const unsafe fn new_unchecked(align: usize) -> Self
407
406
#[ kani:: proof_for_contract( Alignment :: new_unchecked) ]
408
407
pub fn check_new_unchecked ( ) {
409
408
let a = kani:: any :: < usize > ( ) ;
410
-
411
409
unsafe {
412
- let alignment = Alignment :: new_unchecked ( a) ;
413
- assert ! ( alignment. as_usize( ) > 0 ) ;
410
+ let _ = Alignment :: new_unchecked ( a) ;
414
411
}
415
412
}
416
413
@@ -428,7 +425,7 @@ mod verify {
428
425
pub fn check_as_nonzero ( ) {
429
426
let a = kani:: any :: < usize > ( ) ;
430
427
if let Some ( alignment) = Alignment :: new ( a) {
431
- assert_eq ! ( alignment. as_nonzero( ) . get ( ) , a ) ;
428
+ let _ = alignment. as_nonzero ( ) ;
432
429
}
433
430
}
434
431
@@ -437,7 +434,7 @@ mod verify {
437
434
pub fn check_log2 ( ) {
438
435
let a = kani:: any :: < usize > ( ) ;
439
436
if let Some ( alignment) = Alignment :: new ( a) {
440
- assert_eq ! ( 1usize << alignment. log2( ) , a ) ;
437
+ let _ = alignment. log2 ( ) ;
441
438
}
442
439
}
443
440
@@ -446,7 +443,7 @@ mod verify {
446
443
pub fn check_mask ( ) {
447
444
let a = kani:: any :: < usize > ( ) ;
448
445
if let Some ( alignment) = Alignment :: new ( a) {
449
- assert_eq ! ( a & alignment. mask( ) , a ) ;
446
+ let _ = alignment. mask ( ) ;
450
447
}
451
448
}
452
449
}
0 commit comments