diff options
| author | Scott McMurray <scottmcm@users.noreply.github.com> | 2023-02-24 18:32:52 -0800 |
|---|---|---|
| committer | Scott McMurray <scottmcm@users.noreply.github.com> | 2023-03-22 15:15:41 -0700 |
| commit | 9558e12965af71ff8ae592e2abe7e3c2358d320c (patch) | |
| tree | eb4f62a1c8ecebc658105ff99e6c80fccb2b1a67 | |
| parent | edb0717e7ca51dbde53f1dc26956efb0d90825c0 (diff) | |
| download | rust-9558e12965af71ff8ae592e2abe7e3c2358d320c.tar.gz rust-9558e12965af71ff8ae592e2abe7e3c2358d320c.zip | |
Add `CastKind::Transmute` to MIR
Updates `interpret`, `codegen_ssa`, and `codegen_cranelift` to consume the new cast instead of the intrinsic. Includes `CastTransmute` for custom MIR building, to be able to test the extra UB.
| -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); |
