about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2022-04-01 12:07:02 +0200
committerGitHub <noreply@github.com>2022-04-01 12:07:02 +0200
commit3245e6129819f892fd793d42051f6f7bbd2d91bd (patch)
tree7a5fd3ed4ba5231b8c6a9bd9b753eefdb8c1d504
parente21b27ff7a7ca155daaa2fac580b12dd2644da57 (diff)
parent907ba11490e95e2bb649329456eb5ab9a6976f99 (diff)
downloadrust-3245e6129819f892fd793d42051f6f7bbd2d91bd.tar.gz
rust-3245e6129819f892fd793d42051f6f7bbd2d91bd.zip
Rollup merge of #95516 - RalfJung:ptrs-not-ints, r=dtolnay
ptr_metadata test: avoid ptr-to-int transmutes

Pointers can have provenance, integers don't, so transmuting pointers to integers creates "non-standard" values and it is unclear how well those can be supported (https://github.com/rust-lang/unsafe-code-guidelines/issues/286).

So for this test let's take the safer option and use a pointer type instead. That also makes Miri happy. :)
-rw-r--r--library/core/tests/ptr.rs10
1 files changed, 5 insertions, 5 deletions
diff --git a/library/core/tests/ptr.rs b/library/core/tests/ptr.rs
index 750e7295fb5..6a39ab79f49 100644
--- a/library/core/tests/ptr.rs
+++ b/library/core/tests/ptr.rs
@@ -490,11 +490,11 @@ fn ptr_metadata() {
     let vtable_5: DynMetadata<dyn Display> =
         metadata(&Pair(true, 7_u32) as &Pair<bool, dyn Display>);
     unsafe {
-        let address_1: usize = std::mem::transmute(vtable_1);
-        let address_2: usize = std::mem::transmute(vtable_2);
-        let address_3: usize = std::mem::transmute(vtable_3);
-        let address_4: usize = std::mem::transmute(vtable_4);
-        let address_5: usize = std::mem::transmute(vtable_5);
+        let address_1: *const () = std::mem::transmute(vtable_1);
+        let address_2: *const () = std::mem::transmute(vtable_2);
+        let address_3: *const () = std::mem::transmute(vtable_3);
+        let address_4: *const () = std::mem::transmute(vtable_4);
+        let address_5: *const () = std::mem::transmute(vtable_5);
         // Different trait => different vtable pointer
         assert_ne!(address_1, address_2);
         // Different erased type => different vtable pointer