@@ -595,7 +595,6 @@ fn fmt_u128(n: u128, is_nonnegative: bool, f: &mut fmt::Formatter<'_>) -> fmt::R
595
595
// 2^128 is about 3*10^38, so 39 gives an extra byte of space
596
596
let mut buf = [ MaybeUninit :: < u8 > :: uninit ( ) ; 39 ] ;
597
597
let mut curr = buf. len ( ) as isize ;
598
- let buf_ptr = MaybeUninit :: slice_as_mut_ptr ( & mut buf) ;
599
598
600
599
let ( n, rem) = udiv_1e19 ( n) ;
601
600
parse_u64_into ( rem, & mut buf, & mut curr) ;
@@ -606,7 +605,11 @@ fn fmt_u128(n: u128, is_nonnegative: bool, f: &mut fmt::Formatter<'_>) -> fmt::R
606
605
// SAFETY: Guaranteed that we wrote at most 19 bytes, and there must be space
607
606
// remaining since it has length 39
608
607
unsafe {
609
- ptr:: write_bytes ( buf_ptr. offset ( target) , b'0' , ( curr - target) as usize ) ;
608
+ ptr:: write_bytes (
609
+ MaybeUninit :: slice_as_mut_ptr ( & mut buf) . offset ( target) ,
610
+ b'0' ,
611
+ ( curr - target) as usize ,
612
+ ) ;
610
613
}
611
614
curr = target;
612
615
@@ -615,6 +618,9 @@ fn fmt_u128(n: u128, is_nonnegative: bool, f: &mut fmt::Formatter<'_>) -> fmt::R
615
618
// Should this following branch be annotated with unlikely?
616
619
if n != 0 {
617
620
let target = ( buf. len ( ) - 38 ) as isize ;
621
+ // The raw `buf_ptr` pointer is only valid until `buf` is used the next time,
622
+ // buf `buf` is not used in this scope so we are good.
623
+ let buf_ptr = MaybeUninit :: slice_as_mut_ptr ( & mut buf) ;
618
624
// SAFETY: At this point we wrote at most 38 bytes, pad up to that point,
619
625
// There can only be at most 1 digit remaining.
620
626
unsafe {
@@ -629,7 +635,7 @@ fn fmt_u128(n: u128, is_nonnegative: bool, f: &mut fmt::Formatter<'_>) -> fmt::R
629
635
// UTF-8 since `DEC_DIGITS_LUT` is
630
636
let buf_slice = unsafe {
631
637
str:: from_utf8_unchecked ( slice:: from_raw_parts (
632
- buf_ptr . offset ( curr) ,
638
+ MaybeUninit :: slice_as_mut_ptr ( & mut buf ) . offset ( curr) ,
633
639
buf. len ( ) - curr as usize ,
634
640
) )
635
641
} ;
0 commit comments