@@ -632,6 +632,54 @@ fn align_offset_issue_103361() {
632
632
let _ = ( SIZE as * const HugeSize ) . align_offset ( SIZE ) ;
633
633
}
634
634
635
+ #[ test]
636
+ fn is_aligned ( ) {
637
+ let data = 42 ;
638
+ let ptr: * const i32 = & data;
639
+ assert ! ( ptr. is_aligned( ) ) ;
640
+ assert ! ( ptr. is_aligned_to( 1 ) ) ;
641
+ assert ! ( ptr. is_aligned_to( 2 ) ) ;
642
+ assert ! ( ptr. is_aligned_to( 4 ) ) ;
643
+ assert ! ( ptr. wrapping_byte_add( 2 ) . is_aligned_to( 1 ) ) ;
644
+ assert ! ( ptr. wrapping_byte_add( 2 ) . is_aligned_to( 2 ) ) ;
645
+ assert ! ( !ptr. wrapping_byte_add( 2 ) . is_aligned_to( 4 ) ) ;
646
+
647
+ // At runtime either `ptr` or `ptr+1` is aligned to 8.
648
+ assert_ne ! ( ptr. is_aligned_to( 8 ) , ptr. wrapping_add( 1 ) . is_aligned_to( 8 ) ) ;
649
+ }
650
+
651
+ #[ test]
652
+ #[ cfg( not( bootstrap) ) ]
653
+ fn is_aligned_const ( ) {
654
+ const {
655
+ let data = 42 ;
656
+ let ptr: * const i32 = & data;
657
+ assert ! ( ptr. is_aligned( ) ) ;
658
+ assert ! ( ptr. is_aligned_to( 1 ) ) ;
659
+ assert ! ( ptr. is_aligned_to( 2 ) ) ;
660
+ assert ! ( ptr. is_aligned_to( 4 ) ) ;
661
+ assert ! ( ptr. wrapping_byte_add( 2 ) . is_aligned_to( 1 ) ) ;
662
+ assert ! ( ptr. wrapping_byte_add( 2 ) . is_aligned_to( 2 ) ) ;
663
+ assert ! ( !ptr. wrapping_byte_add( 2 ) . is_aligned_to( 4 ) ) ;
664
+
665
+ // At comptime neither `ptr` nor `ptr+1` is aligned to 8.
666
+ assert ! ( !ptr. is_aligned_to( 8 ) ) ;
667
+ assert ! ( !ptr. wrapping_add( 1 ) . is_aligned_to( 8 ) ) ;
668
+ }
669
+ }
670
+
671
+ #[ test]
672
+ #[ cfg( bootstrap) ]
673
+ fn is_aligned_const ( ) {
674
+ const {
675
+ let data = 42 ;
676
+ let ptr: * const i32 = & data;
677
+ // The bootstrap compiler always returns false for is_aligned.
678
+ assert ! ( !ptr. is_aligned( ) ) ;
679
+ assert ! ( !ptr. is_aligned_to( 1 ) ) ;
680
+ }
681
+ }
682
+
635
683
#[ test]
636
684
fn offset_from ( ) {
637
685
let mut a = [ 0 ; 5 ] ;
0 commit comments