@@ -620,6 +620,54 @@ fn align_offset_with_provenance_const() {
620
620
}
621
621
}
622
622
623
+ #[ test]
624
+ fn is_aligned ( ) {
625
+ let data = 42 ;
626
+ let ptr: * const i32 = & data;
627
+ assert ! ( ptr. is_aligned( ) ) ;
628
+ assert ! ( ptr. is_aligned_to( 1 ) ) ;
629
+ assert ! ( ptr. is_aligned_to( 2 ) ) ;
630
+ assert ! ( ptr. is_aligned_to( 4 ) ) ;
631
+ assert ! ( ptr. wrapping_byte_add( 2 ) . is_aligned_to( 1 ) ) ;
632
+ assert ! ( ptr. wrapping_byte_add( 2 ) . is_aligned_to( 2 ) ) ;
633
+ assert ! ( !ptr. wrapping_byte_add( 2 ) . is_aligned_to( 4 ) ) ;
634
+
635
+ // At runtime either `ptr` or `ptr+1` is aligned to 8.
636
+ assert_ne ! ( ptr. is_aligned_to( 8 ) , ptr. wrapping_add( 1 ) . is_aligned_to( 8 ) ) ;
637
+ }
638
+
639
+ #[ test]
640
+ #[ cfg( not( bootstrap) ) ]
641
+ fn is_aligned_const ( ) {
642
+ const {
643
+ let data = 42 ;
644
+ let ptr: * const i32 = & data;
645
+ assert ! ( ptr. is_aligned( ) ) ;
646
+ assert ! ( ptr. is_aligned_to( 1 ) ) ;
647
+ assert ! ( ptr. is_aligned_to( 2 ) ) ;
648
+ assert ! ( ptr. is_aligned_to( 4 ) ) ;
649
+ assert ! ( ptr. wrapping_byte_add( 2 ) . is_aligned_to( 1 ) ) ;
650
+ assert ! ( ptr. wrapping_byte_add( 2 ) . is_aligned_to( 2 ) ) ;
651
+ assert ! ( !ptr. wrapping_byte_add( 2 ) . is_aligned_to( 4 ) ) ;
652
+
653
+ // At comptime neither `ptr` nor `ptr+1` is aligned to 8.
654
+ assert ! ( !ptr. is_aligned_to( 8 ) ) ;
655
+ assert ! ( !ptr. wrapping_add( 1 ) . is_aligned_to( 8 ) ) ;
656
+ }
657
+ }
658
+
659
+ #[ test]
660
+ #[ cfg( bootstrap) ]
661
+ fn is_aligned_const ( ) {
662
+ const {
663
+ let data = 42 ;
664
+ let ptr: * const i32 = & data;
665
+ // The bootstrap compiler always returns false for is_aligned.
666
+ assert ! ( !ptr. is_aligned( ) ) ;
667
+ assert ! ( !ptr. is_aligned_to( 1 ) ) ;
668
+ }
669
+ }
670
+
623
671
#[ test]
624
672
fn offset_from ( ) {
625
673
let mut a = [ 0 ; 5 ] ;
0 commit comments