File tree 4 files changed +16
-7
lines changed
4 files changed +16
-7
lines changed Original file line number Diff line number Diff line change @@ -2776,7 +2776,16 @@ impl Display for char {
2776
2776
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
2777
2777
impl < T : ?Sized > Pointer for * const T {
2778
2778
fn fmt ( & self , f : & mut Formatter < ' _ > ) -> Result {
2779
- pointer_fmt_inner ( self . expose_provenance ( ) , f)
2779
+ if core:: any:: TypeId :: of :: < <T as core:: ptr:: Pointee >:: Metadata > ( )
2780
+ == core:: any:: TypeId :: of :: < ( ) > ( )
2781
+ {
2782
+ pointer_fmt_inner ( self . expose_provenance ( ) , f)
2783
+ } else {
2784
+ f. debug_struct ( "Pointer" )
2785
+ . field_with ( "addr" , |f| pointer_fmt_inner ( self . expose_provenance ( ) , f) )
2786
+ . field ( "metadata" , & core:: ptr:: metadata ( * self ) )
2787
+ . finish ( )
2788
+ }
2780
2789
}
2781
2790
}
2782
2791
Original file line number Diff line number Diff line change @@ -61,7 +61,7 @@ pub trait Pointee {
61
61
// NOTE: Keep trait bounds in `static_assert_expected_bounds_for_metadata`
62
62
// in `library/core/src/ptr/metadata.rs`
63
63
// in sync with those here:
64
- type Metadata : fmt:: Debug + Copy + Send + Sync + Ord + Hash + Unpin + Freeze ;
64
+ type Metadata : fmt:: Debug + Copy + Send + Sync + Ord + Hash + Unpin + Freeze + ' static ;
65
65
}
66
66
67
67
/// Pointers to types implementing this trait alias are “thin”.
Original file line number Diff line number Diff line change @@ -42,12 +42,12 @@ fn test_fmt_debug_of_raw_pointers() {
42
42
check_fmt ( plain as * const i32 , "$HEX" ) ;
43
43
44
44
let slice = & mut [ 200 , 300 , 400 ] [ ..] ;
45
- check_fmt ( slice as * mut [ i32 ] , "$HEX" ) ;
46
- check_fmt ( slice as * const [ i32 ] , "$HEX" ) ;
45
+ check_fmt ( slice as * mut [ i32 ] , "Pointer { addr: $HEX, metadata: 3 } " ) ;
46
+ check_fmt ( slice as * const [ i32 ] , "Pointer { addr: $HEX, metadata: 3 } " ) ;
47
47
48
48
let vtable = & mut 500 as & mut dyn Debug ;
49
- check_fmt ( vtable as * mut dyn Debug , "$HEX" ) ;
50
- check_fmt ( vtable as * const dyn Debug , "$HEX" ) ;
49
+ check_fmt ( vtable as * mut dyn Debug , "Pointer { addr: $HEX, metadata: DynMetadata($HEX) } " ) ;
50
+ check_fmt ( vtable as * const dyn Debug , "Pointer { addr: $HEX, metadata: DynMetadata($HEX) } " ) ;
51
51
}
52
52
53
53
#[ test]
Original file line number Diff line number Diff line change @@ -589,7 +589,7 @@ fn ptr_metadata_bounds() {
589
589
fn static_assert_expected_bounds_for_metadata < Meta > ( )
590
590
where
591
591
// Keep this in sync with the associated type in `library/core/src/ptr/metadata.rs`
592
- Meta : Debug + Copy + Send + Sync + Ord + std:: hash:: Hash + Unpin + Freeze ,
592
+ Meta : Debug + Copy + Send + Sync + Ord + std:: hash:: Hash + Unpin + Freeze + ' static ,
593
593
{
594
594
}
595
595
}
You can’t perform that action at this time.
0 commit comments