Skip to content

Commit d991a97

Browse files
Restore movability to SMIR
1 parent 537aac5 commit d991a97

File tree

7 files changed

+16
-9
lines changed

7 files changed

+16
-9
lines changed

compiler/rustc_smir/src/rustc_internal/internal.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ impl<'tcx> RustcInternal<'tcx> for RigidTy {
104104
RigidTy::Closure(def, args) => {
105105
rustc_ty::TyKind::Closure(def.0.internal(tables), args.internal(tables))
106106
}
107-
RigidTy::Coroutine(def, args) => {
107+
RigidTy::Coroutine(def, args, _mov) => {
108108
rustc_ty::TyKind::Coroutine(def.0.internal(tables), args.internal(tables))
109109
}
110110
RigidTy::CoroutineWitness(def, args) => {

compiler/rustc_smir/src/rustc_smir/convert/mir.rs

+1
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,7 @@ impl<'tcx> Stable<'tcx> for mir::AggregateKind<'tcx> {
535535
stable_mir::mir::AggregateKind::Coroutine(
536536
tables.coroutine_def(*def_id),
537537
generic_arg.stable(tables),
538+
tables.tcx.movability(*def_id).stable(tables),
538539
)
539540
}
540541
}

compiler/rustc_smir/src/rustc_smir/convert/ty.rs

+1
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,7 @@ impl<'tcx> Stable<'tcx> for ty::TyKind<'tcx> {
389389
ty::Coroutine(def_id, generic_args) => TyKind::RigidTy(RigidTy::Coroutine(
390390
tables.coroutine_def(*def_id),
391391
generic_args.stable(tables),
392+
tables.tcx.movability(*def_id).stable(tables),
392393
)),
393394
ty::Never => TyKind::RigidTy(RigidTy::Never),
394395
ty::Tuple(fields) => {

compiler/stable_mir/src/mir/body.rs

+7-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use crate::mir::pretty::{function_body, pretty_statement, pretty_terminator};
22
use crate::ty::{
3-
AdtDef, ClosureDef, Const, CoroutineDef, GenericArgs, Region, RigidTy, Ty, TyKind, VariantIdx,
3+
AdtDef, ClosureDef, Const, CoroutineDef, GenericArgs, Movability, Region, RigidTy, Ty, TyKind,
4+
VariantIdx,
45
};
56
use crate::{Error, Opaque, Span, Symbol};
67
use std::io;
@@ -645,7 +646,9 @@ impl Rvalue {
645646
)),
646647
AggregateKind::Adt(def, _, ref args, _, _) => Ok(def.ty_with_args(args)),
647648
AggregateKind::Closure(def, ref args) => Ok(Ty::new_closure(def, args.clone())),
648-
AggregateKind::Coroutine(def, ref args) => Ok(Ty::new_coroutine(def, args.clone())),
649+
AggregateKind::Coroutine(def, ref args, mov) => {
650+
Ok(Ty::new_coroutine(def, args.clone(), mov))
651+
}
649652
},
650653
Rvalue::ShallowInitBox(_, ty) => Ok(Ty::new_box(*ty)),
651654
Rvalue::CopyForDeref(place) => place.ty(locals),
@@ -659,7 +662,8 @@ pub enum AggregateKind {
659662
Tuple,
660663
Adt(AdtDef, VariantIdx, GenericArgs, Option<UserTypeAnnotationIndex>, Option<FieldIdx>),
661664
Closure(ClosureDef, GenericArgs),
662-
Coroutine(CoroutineDef, GenericArgs),
665+
// FIXME(stable_mir): Movability here is redundant
666+
Coroutine(CoroutineDef, GenericArgs, Movability),
663667
}
664668

665669
#[derive(Clone, Debug, Eq, PartialEq)]

compiler/stable_mir/src/mir/pretty.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,7 @@ pub fn pretty_ty(ty: TyKind) -> String {
443443
RigidTy::FnDef(_, _) => format!("{:#?}", rigid_ty),
444444
RigidTy::FnPtr(_) => format!("{:#?}", rigid_ty),
445445
RigidTy::Closure(_, _) => format!("{:#?}", rigid_ty),
446-
RigidTy::Coroutine(_, _) => format!("{:#?}", rigid_ty),
446+
RigidTy::Coroutine(_, _, _) => format!("{:#?}", rigid_ty),
447447
RigidTy::Dynamic(data, region, repr) => {
448448
// FIXME: Fix binder printing, it looks ugly now
449449
pretty.push_str("(");

compiler/stable_mir/src/ty.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ impl Ty {
5858
}
5959

6060
/// Create a new coroutine type.
61-
pub fn new_coroutine(def: CoroutineDef, args: GenericArgs) -> Ty {
62-
Ty::from_rigid_kind(RigidTy::Coroutine(def, args))
61+
pub fn new_coroutine(def: CoroutineDef, args: GenericArgs, mov: Movability) -> Ty {
62+
Ty::from_rigid_kind(RigidTy::Coroutine(def, args, mov))
6363
}
6464

6565
/// Create a new box type that represents `Box<T>`, for the given inner type `T`.
@@ -460,7 +460,8 @@ pub enum RigidTy {
460460
FnDef(FnDef, GenericArgs),
461461
FnPtr(PolyFnSig),
462462
Closure(ClosureDef, GenericArgs),
463-
Coroutine(CoroutineDef, GenericArgs),
463+
// FIXME(stable_mir): Movability here is redundant
464+
Coroutine(CoroutineDef, GenericArgs, Movability),
464465
Dynamic(Vec<Binder<ExistentialPredicate>>, Region, DynKind),
465466
Never,
466467
Tuple(Vec<Ty>),

compiler/stable_mir/src/visitor.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ impl Visitable for RigidTy {
148148
RigidTy::FnDef(_, args) => args.visit(visitor),
149149
RigidTy::FnPtr(sig) => sig.visit(visitor),
150150
RigidTy::Closure(_, args) => args.visit(visitor),
151-
RigidTy::Coroutine(_, args) => args.visit(visitor),
151+
RigidTy::Coroutine(_, args, _) => args.visit(visitor),
152152
RigidTy::CoroutineWitness(_, args) => args.visit(visitor),
153153
RigidTy::Dynamic(pred, r, _) => {
154154
pred.visit(visitor)?;

0 commit comments

Comments
 (0)