diff options
| author | bors <bors@rust-lang.org> | 2023-03-23 18:43:04 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-03-23 18:43:04 +0000 |
| commit | 7ac6cc905e082e6f5af7138c6fff829a91cb146b (patch) | |
| tree | b8041cc4e224cf24cb035ef1a29b878d7e30a0dc | |
| parent | 60aafee963b04343c3aa80f069aeafd08013124f (diff) | |
| parent | 9558e12965af71ff8ae592e2abe7e3c2358d320c (diff) | |
| download | rust-7ac6cc905e082e6f5af7138c6fff829a91cb146b.tar.gz rust-7ac6cc905e082e6f5af7138c6fff829a91cb146b.zip | |
Auto merge of #108442 - scottmcm:mir-transmute, r=oli-obk
Add `CastKind::Transmute` to MIR ~~Nothing actually produces it in this commit, so I don't know how to test it, but it also means it shouldn't be possible for it to break anything.~~ Includes lowering `transmute` calls to it, so it's used. Zulip Conversation: <https://rust-lang.zulipchat.com/#narrow/stream/189540-t-compiler.2Fwg-mir-opt/topic/Good.20first.20isssue/near/321849610>
| -rw-r--r-- | src/base.rs | 4 | ||||
| -rw-r--r-- | src/intrinsics/mod.rs | 10 |
2 files changed, 4 insertions, 10 deletions
diff --git a/src/base.rs b/src/base.rs index 1b8e9312e2f..2107ae147e9 100644 --- a/src/base.rs +++ b/src/base.rs @@ -709,6 +709,10 @@ fn codegen_stmt<'tcx>( let operand = codegen_operand(fx, operand); operand.coerce_dyn_star(fx, lval); } + Rvalue::Cast(CastKind::Transmute, ref operand, _to_ty) => { + let operand = codegen_operand(fx, operand); + lval.write_cvalue_transmute(fx, operand); + } Rvalue::Discriminant(place) => { let place = codegen_place(fx, place); let value = place.to_cvalue(fx); diff --git a/src/intrinsics/mod.rs b/src/intrinsics/mod.rs index fe48cac4faf..03f2a65fcca 100644 --- a/src/intrinsics/mod.rs +++ b/src/intrinsics/mod.rs @@ -557,16 +557,6 @@ fn codegen_regular_intrinsic_call<'tcx>( fx.bcx.ins().band(ptr, mask); } - sym::transmute => { - intrinsic_args!(fx, args => (from); intrinsic); - - if ret.layout().abi.is_uninhabited() { - crate::base::codegen_panic(fx, "Transmuting to uninhabited type.", source_info); - return; - } - - ret.write_cvalue_transmute(fx, from); - } sym::write_bytes | sym::volatile_set_memory => { intrinsic_args!(fx, args => (dst, val, count); intrinsic); let val = val.load_scalar(fx); |
