mirror of
https://github.com/rust-lang/rust.git
synced 2025-09-28 13:46:03 +00:00

We already did `Transmute`-then-`PtrToPtr`; this adds the nearly-identical `PtrToPtr`-then-`Transmute`. It also adds `transmute(Foo(x))` → `transmute(x)`, when `Foo` is a single-field transparent type. That's useful for things like `NonNull { pointer: p }.as_ptr()`. Found these as I was looking at MCP807-related changes.
39 lines
875 B
Diff
39 lines
875 B
Diff
- // MIR for `caller` before Inline
|
|
+ // MIR for `caller` after Inline
|
|
|
|
fn caller(_1: Box<[i32]>) -> () {
|
|
debug x => _1;
|
|
let mut _0: ();
|
|
let _2: ();
|
|
let mut _3: std::boxed::Box<[i32]>;
|
|
let mut _4: *const [i32];
|
|
|
|
bb0: {
|
|
StorageLive(_2);
|
|
StorageLive(_3);
|
|
_3 = move _1;
|
|
_4 = copy ((_3.0: std::ptr::Unique<[i32]>).0: std::ptr::NonNull<[i32]>) as *const [i32] (Transmute);
|
|
_2 = callee(move (*_4)) -> [return: bb1, unwind: bb3];
|
|
}
|
|
|
|
bb1: {
|
|
drop(_3) -> [return: bb2, unwind: bb4];
|
|
}
|
|
|
|
bb2: {
|
|
StorageDead(_3);
|
|
StorageDead(_2);
|
|
_0 = const ();
|
|
return;
|
|
}
|
|
|
|
bb3 (cleanup): {
|
|
drop(_3) -> [return: bb4, unwind terminate(cleanup)];
|
|
}
|
|
|
|
bb4 (cleanup): {
|
|
resume;
|
|
}
|
|
}
|
|
|