]> git.lizzy.rs Git - rust.git/commit - src/tools/miri
Auto merge of #99420 - RalfJung:vtable, r=oli-obk
authorbors <bors@rust-lang.org>
Fri, 22 Jul 2022 01:33:49 +0000 (01:33 +0000)
committerbors <bors@rust-lang.org>
Fri, 22 Jul 2022 01:33:49 +0000 (01:33 +0000)
commitaa0189170057a6b56f445f05b9840caf6f260212
tree44b90133d775da8a57ad4a5d8a5464e1329125c2
parent31b9b012bbced0c47a0ff5e4453cdc2e91e668b2
parentd46dfa25d46be353a0cda39373e0319eb4f3ec69
Auto merge of #99420 - RalfJung:vtable, r=oli-obk

make vtable pointers entirely opaque

This implements the scheme discussed in https://github.com/rust-lang/unsafe-code-guidelines/issues/338: vtable pointers should be considered entirely opaque and not even readable by Rust code, similar to function pointers.

- We have a new kind of `GlobalAlloc` that symbolically refers to a vtable.
- Miri uses that kind of allocation when generating a vtable.
- The codegen backends, upon encountering such an allocation, call `vtable_allocation` to obtain an actually dataful allocation for this vtable.
- We need new intrinsics to obtain the size and align from a vtable (for some `ptr::metadata` APIs), since direct accesses are UB now.

I had to touch quite a bit of code that I am not very familiar with, so some of this might not make much sense...
r? `@oli-obk`
compiler/rustc_codegen_llvm/src/consts.rs
compiler/rustc_middle/src/ty/mod.rs
compiler/rustc_span/src/symbol.rs