Comments (11)
Generative types from existentials would allow perfectly typed safe vtables from even user code ;).
from miri.
@Aatch tells me that they had this problem in the rustc compiler, too, and solved it by computing these trait object field offsets dynamically by reading the alignment stored in the vtable.
from miri.
Specifically, we need to do it dynamically for only the DST field, only when it's not the first field, and only for non-packed structs.
from miri.
We can make use of our size_and_align_of_dst
. Here is the relevant code in rustc trans with comments.
from miri.
While I agree that this is the solution, shouldn't rustc's layout computation fail on dsts? I mean the layout is just plain wrong.
from miri.
@oli-obk No, the layout computation for DSTs returns information you can't possibly get otherwise.
from miri.
How about protecting the offsets
field (access only through an accessor) in case sized: false
?
from miri.
@oli-obk You still need the offset of the last field. It's correct in terms of being the base offset but each backend has to generate its own dynamic alignment code. I don't think it's possible to ergonomically hide it.
from miri.
@eddyb We could ergonomically hide it if MIR desugared to a form with explicit vtable accesses and expanded DST field offsets to MIR statements doing this offset calculation in a backend-independent way. =)
from miri.
Unfortunately MIR is typed, so you would need.... vtable types? A person can dream, though.
from miri.
I mean, other than using the generative typing trick through lifetime HRTB.
from miri.
Related Issues (20)
- Running `Cargo miri test` on `cargo`, an error occurred HOT 6
- Massive slowdown caused by stacked borrows on code involving raw pointers + UnsafeCell HOT 6
- Programs that cast function pointers have escalating memory use HOT 1
- Support `SystemTime` with enabled isolation HOT 4
- Implement pipe/pipe2 HOT 1
- pthreads synchronization primitives: detect mutex/rwlock/... being moved to a different location HOT 8
- FFI implementation libc getuid on Linux HOT 2
- False positive deadlock with `pollster` and async HOT 2
- Support miri-specific entry point / start function for no-std binaries
- Miri can't call foreign function `mi_malloc_aligned` on OS `linux` HOT 1
- Tree-borrows false positive with `iter::Extend`? HOT 5
- offset_from "same allocation" check is confused by int-to-ptr casts HOT 3
- Are unclosed file descriptors a memory leak? HOT 3
- Project idea: strongly typed file descriptor integers and deduplication of various checks around them HOT 4
- false positive with SB+TB: "Shifting" of a value HOT 6
- `cargo miri test` fails without `RUSTC` env var HOT 3
- Undefined behavior from `poll_fn` + `futures::join!` / `std::future::join!` HOT 11
- Tail calls end protectors too early HOT 2
- !Send Future violates stacked borrow rules HOT 10
- Implicit reborrows do not cause writes HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from miri.