@@ -510,49 +510,53 @@ fn align_offset_various_strides_const() {
510510 assert ! ( got == expected) ;
511511 }
512512
513- // For pointers of stride != 1, we verify the algorithm against the naivest possible
514- // implementation
515- let mut align = 1 ;
516- let limit = 1024 ;
517- while align < limit {
518- for ptr in 1usize ..4 * align {
519- unsafe {
520- #[ repr( packed) ]
521- struct A3 ( u16 , u8 ) ;
522- test_stride :: < A3 > ( ptr:: invalid :: < A3 > ( ptr) , ptr, align) ;
523-
524- struct A4 ( u32 ) ;
525- test_stride :: < A4 > ( ptr:: invalid :: < A4 > ( ptr) , ptr, align) ;
526-
527- #[ repr( packed) ]
528- struct A5 ( u32 , u8 ) ;
529- test_stride :: < A5 > ( ptr:: invalid :: < A5 > ( ptr) , ptr, align) ;
530-
531- #[ repr( packed) ]
532- struct A6 ( u32 , u16 ) ;
533- test_stride :: < A6 > ( ptr:: invalid :: < A6 > ( ptr) , ptr, align) ;
534-
535- #[ repr( packed) ]
536- struct A7 ( u32 , u16 , u8 ) ;
537- test_stride :: < A7 > ( ptr:: invalid :: < A7 > ( ptr) , ptr, align) ;
538-
539- #[ repr( packed) ]
540- struct A8 ( u32 , u32 ) ;
541- test_stride :: < A8 > ( ptr:: invalid :: < A8 > ( ptr) , ptr, align) ;
542-
543- #[ repr( packed) ]
544- struct A9 ( u32 , u32 , u8 ) ;
545- test_stride :: < A9 > ( ptr:: invalid :: < A9 > ( ptr) , ptr, align) ;
546-
547- #[ repr( packed) ]
548- struct A10 ( u32 , u32 , u16 ) ;
549- test_stride :: < A10 > ( ptr:: invalid :: < A10 > ( ptr) , ptr, align) ;
550-
551- test_stride :: < u32 > ( ptr:: invalid :: < u32 > ( ptr) , ptr, align) ;
552- test_stride :: < u128 > ( ptr:: invalid :: < u128 > ( ptr) , ptr, align) ;
513+ const {
514+ // For pointers of stride != 1, we verify the algorithm against the naivest possible
515+ // implementation
516+ let mut align = 1 ;
517+ let limit = 32 ;
518+ while align < limit {
519+ let mut ptr = 1 ;
520+ while ptr < 4 * align {
521+ unsafe {
522+ #[ repr( packed) ]
523+ struct A3 ( u16 , u8 ) ;
524+ test_stride :: < A3 > ( ptr:: invalid :: < A3 > ( ptr) , ptr, align) ;
525+
526+ struct A4 ( u32 ) ;
527+ test_stride :: < A4 > ( ptr:: invalid :: < A4 > ( ptr) , ptr, align) ;
528+
529+ #[ repr( packed) ]
530+ struct A5 ( u32 , u8 ) ;
531+ test_stride :: < A5 > ( ptr:: invalid :: < A5 > ( ptr) , ptr, align) ;
532+
533+ #[ repr( packed) ]
534+ struct A6 ( u32 , u16 ) ;
535+ test_stride :: < A6 > ( ptr:: invalid :: < A6 > ( ptr) , ptr, align) ;
536+
537+ #[ repr( packed) ]
538+ struct A7 ( u32 , u16 , u8 ) ;
539+ test_stride :: < A7 > ( ptr:: invalid :: < A7 > ( ptr) , ptr, align) ;
540+
541+ #[ repr( packed) ]
542+ struct A8 ( u32 , u32 ) ;
543+ test_stride :: < A8 > ( ptr:: invalid :: < A8 > ( ptr) , ptr, align) ;
544+
545+ #[ repr( packed) ]
546+ struct A9 ( u32 , u32 , u8 ) ;
547+ test_stride :: < A9 > ( ptr:: invalid :: < A9 > ( ptr) , ptr, align) ;
548+
549+ #[ repr( packed) ]
550+ struct A10 ( u32 , u32 , u16 ) ;
551+ test_stride :: < A10 > ( ptr:: invalid :: < A10 > ( ptr) , ptr, align) ;
552+
553+ test_stride :: < u32 > ( ptr:: invalid :: < u32 > ( ptr) , ptr, align) ;
554+ test_stride :: < u128 > ( ptr:: invalid :: < u128 > ( ptr) , ptr, align) ;
555+ }
556+ ptr += 1 ;
553557 }
558+ align = ( align + 1 ) . next_power_of_two ( ) ;
554559 }
555- align = ( align + 1 ) . next_power_of_two ( ) ;
556560 }
557561}
558562
@@ -632,6 +636,24 @@ fn align_offset_issue_103361() {
632636 let _ = ( SIZE as * const HugeSize ) . align_offset ( SIZE ) ;
633637}
634638
639+ #[ test]
640+ #[ cfg( not( bootstrap) ) ]
641+ fn align_offset_issue_103361_const ( ) {
642+ #[ cfg( target_pointer_width = "64" ) ]
643+ const SIZE : usize = 1 << 47 ;
644+ #[ cfg( target_pointer_width = "32" ) ]
645+ const SIZE : usize = 1 << 30 ;
646+ #[ cfg( target_pointer_width = "16" ) ]
647+ const SIZE : usize = 1 << 13 ;
648+ struct HugeSize ( [ u8 ; SIZE - 1 ] ) ;
649+
650+ const {
651+ assert ! ( ptr:: invalid:: <HugeSize >( SIZE - 1 ) . align_offset( SIZE ) == SIZE - 1 ) ;
652+ assert ! ( ptr:: invalid:: <HugeSize >( SIZE ) . align_offset( SIZE ) == 0 ) ;
653+ assert ! ( ptr:: invalid:: <HugeSize >( SIZE + 1 ) . align_offset( SIZE ) == 1 ) ;
654+ }
655+ }
656+
635657#[ test]
636658fn is_aligned ( ) {
637659 let data = 42 ;
0 commit comments