1
1
use core:: cell:: RefCell ;
2
2
use core:: ptr:: * ;
3
- use std:: fmt:: Display ;
3
+ use std:: fmt:: { Debug , Display } ;
4
4
5
5
#[ test]
6
6
fn test_const_from_raw_parts ( ) {
@@ -452,20 +452,25 @@ fn ptr_metadata() {
452
452
assert_eq ! ( metadata( dst_struct) , 3_usize ) ;
453
453
}
454
454
455
- let vtable_1: DynMetadata = metadata ( & 4_u32 as & dyn Display ) ;
456
- let vtable_2: DynMetadata = metadata ( & ( true , 7_u32 ) as & ( bool , dyn Display ) ) ;
457
- let vtable_3: DynMetadata = metadata ( & Pair ( true , 7_u32 ) as & Pair < bool , dyn Display > ) ;
458
- let vtable_4: DynMetadata = metadata ( & 4_u16 as & dyn Display ) ;
455
+ let vtable_1: DynMetadata < dyn Debug > = metadata ( & 4_u16 as & dyn Debug ) ;
456
+ let vtable_2: DynMetadata < dyn Display > = metadata ( & 4_u16 as & dyn Display ) ;
457
+ let vtable_3: DynMetadata < dyn Display > = metadata ( & 4_u32 as & dyn Display ) ;
458
+ let vtable_4: DynMetadata < dyn Display > = metadata ( & ( true , 7_u32 ) as & ( bool , dyn Display ) ) ;
459
+ let vtable_5: DynMetadata < dyn Display > =
460
+ metadata ( & Pair ( true , 7_u32 ) as & Pair < bool , dyn Display > ) ;
459
461
unsafe {
460
462
let address_1: usize = std:: mem:: transmute ( vtable_1) ;
461
463
let address_2: usize = std:: mem:: transmute ( vtable_2) ;
462
464
let address_3: usize = std:: mem:: transmute ( vtable_3) ;
463
465
let address_4: usize = std:: mem:: transmute ( vtable_4) ;
464
- // Same erased type and same trait: same vtable pointer
465
- assert_eq ! ( address_1, address_2) ;
466
- assert_eq ! ( address_1, address_3) ;
467
- // Different erased type: different vtable pointer
468
- assert_ne ! ( address_1, address_4) ;
466
+ let address_5: usize = std:: mem:: transmute ( vtable_5) ;
467
+ // Different trait => different vtable pointer
468
+ assert_ne ! ( address_1, address_2) ;
469
+ // Different erased type => different vtable pointer
470
+ assert_ne ! ( address_2, address_3) ;
471
+ // Same erased type and same trait => same vtable pointer
472
+ assert_eq ! ( address_3, address_4) ;
473
+ assert_eq ! ( address_3, address_5) ;
469
474
}
470
475
}
471
476
@@ -486,11 +491,11 @@ fn ptr_metadata_bounds() {
486
491
487
492
// For this reason, let’s check here that bounds are satisfied:
488
493
489
- static_assert_expected_bounds_for_metadata :: < ( ) > ( ) ;
490
- static_assert_expected_bounds_for_metadata :: < usize > ( ) ;
491
- static_assert_expected_bounds_for_metadata :: < DynMetadata > ( ) ;
492
- fn static_assert_associated_type < T : ?Sized > ( ) {
493
- static_assert_expected_bounds_for_metadata :: < <T as Pointee >:: Metadata > ( )
494
+ let _ = static_assert_expected_bounds_for_metadata :: < ( ) > ;
495
+ let _ = static_assert_expected_bounds_for_metadata :: < usize > ;
496
+ let _ = static_assert_expected_bounds_for_metadata :: < DynMetadata < dyn Display > > ;
497
+ fn _static_assert_associated_type < T : ?Sized > ( ) {
498
+ let _ = static_assert_expected_bounds_for_metadata :: < <T as Pointee >:: Metadata > ;
494
499
}
495
500
496
501
fn static_assert_expected_bounds_for_metadata < Meta > ( )
0 commit comments