about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGary Guo <gary@garyguo.net>2022-10-13 16:44:31 +0100
committerGary Guo <gary@garyguo.net>2022-10-13 16:44:47 +0100
commitde0396c7180f8e36165c3fefb9325b0ec1bfb5a2 (patch)
treec43eca07016e503d80a157771e3bab6f74f214b5
parent4891d57f7aab37b5d6a84f2901c0bb8903111d53 (diff)
downloadrust-de0396c7180f8e36165c3fefb9325b0ec1bfb5a2.tar.gz
rust-de0396c7180f8e36165c3fefb9325b0ec1bfb5a2.zip
Ensure enum cast moves
-rw-r--r--compiler/rustc_mir_build/src/build/expr/as_rvalue.rs4
1 files changed, 2 insertions, 2 deletions
diff --git a/compiler/rustc_mir_build/src/build/expr/as_rvalue.rs b/compiler/rustc_mir_build/src/build/expr/as_rvalue.rs
index 35a00da8d38..3dafdcb7887 100644
--- a/compiler/rustc_mir_build/src/build/expr/as_rvalue.rs
+++ b/compiler/rustc_mir_build/src/build/expr/as_rvalue.rs
@@ -197,13 +197,13 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
                 // create all the steps directly in MIR with operations all backends need to support anyway.
                 let (source, ty) = if let ty::Adt(adt_def, ..) = source.ty.kind() && adt_def.is_enum() {
                     let discr_ty = adt_def.repr().discr_type().to_ty(this.tcx);
-                    let place = unpack!(block = this.as_place(block, source));
+                    let temp = unpack!(block = this.as_temp(block, scope, source, Mutability::Not));
                     let discr = this.temp(discr_ty, source.span);
                     this.cfg.push_assign(
                         block,
                         source_info,
                         discr,
-                        Rvalue::Discriminant(place),
+                        Rvalue::Discriminant(temp.into()),
                     );
 
                     (Operand::Move(discr), discr_ty)