mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 00:34:06 +00:00
Auto merge of #117787 - ouz-a:smir_coroutinewitness, r=celinval
Add CoroutineWitness to covered types in smir Previously we accepted `CouroutineWitness` as `unreachable!` but https://github.com/rust-lang/project-stable-mir/issues/50 shows it is indeed reachable, this pr fixes that and covers `CouroutineWitness`
This commit is contained in:
commit
d97bb195bf
@ -104,6 +104,10 @@ impl<'tcx> Tables<'tcx> {
|
|||||||
stable_mir::ty::RegionDef(self.create_def_id(did))
|
stable_mir::ty::RegionDef(self.create_def_id(did))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn coroutine_witness_def(&mut self, did: DefId) -> stable_mir::ty::CoroutineWitnessDef {
|
||||||
|
stable_mir::ty::CoroutineWitnessDef(self.create_def_id(did))
|
||||||
|
}
|
||||||
|
|
||||||
pub fn prov(&mut self, aid: AllocId) -> stable_mir::ty::Prov {
|
pub fn prov(&mut self, aid: AllocId) -> stable_mir::ty::Prov {
|
||||||
stable_mir::ty::Prov(self.create_alloc_id(aid))
|
stable_mir::ty::Prov(self.create_alloc_id(aid))
|
||||||
}
|
}
|
||||||
|
@ -1292,7 +1292,11 @@ impl<'tcx> Stable<'tcx> for ty::TyKind<'tcx> {
|
|||||||
ty::Bound(debruijn_idx, bound_ty) => {
|
ty::Bound(debruijn_idx, bound_ty) => {
|
||||||
TyKind::Bound(debruijn_idx.as_usize(), bound_ty.stable(tables))
|
TyKind::Bound(debruijn_idx.as_usize(), bound_ty.stable(tables))
|
||||||
}
|
}
|
||||||
ty::Placeholder(..) | ty::CoroutineWitness(..) | ty::Infer(_) | ty::Error(_) => {
|
ty::CoroutineWitness(def_id, args) => TyKind::RigidTy(RigidTy::CoroutineWitness(
|
||||||
|
tables.coroutine_witness_def(*def_id),
|
||||||
|
args.stable(tables),
|
||||||
|
)),
|
||||||
|
ty::Placeholder(..) | ty::Infer(_) | ty::Error(_) => {
|
||||||
unreachable!();
|
unreachable!();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -156,6 +156,7 @@ pub enum RigidTy {
|
|||||||
Dynamic(Vec<Binder<ExistentialPredicate>>, Region, DynKind),
|
Dynamic(Vec<Binder<ExistentialPredicate>>, Region, DynKind),
|
||||||
Never,
|
Never,
|
||||||
Tuple(Vec<Ty>),
|
Tuple(Vec<Ty>),
|
||||||
|
CoroutineWitness(CoroutineWitnessDef, GenericArgs),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
||||||
@ -235,6 +236,9 @@ pub struct ImplDef(pub DefId);
|
|||||||
#[derive(Clone, PartialEq, Eq, Debug)]
|
#[derive(Clone, PartialEq, Eq, Debug)]
|
||||||
pub struct RegionDef(pub DefId);
|
pub struct RegionDef(pub DefId);
|
||||||
|
|
||||||
|
#[derive(Clone, PartialEq, Eq, Debug)]
|
||||||
|
pub struct CoroutineWitnessDef(pub DefId);
|
||||||
|
|
||||||
/// A list of generic arguments.
|
/// A list of generic arguments.
|
||||||
#[derive(Clone, Debug, Eq, PartialEq)]
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
||||||
pub struct GenericArgs(pub Vec<GenericArgKind>);
|
pub struct GenericArgs(pub Vec<GenericArgKind>);
|
||||||
|
@ -149,6 +149,7 @@ impl Visitable for RigidTy {
|
|||||||
RigidTy::FnPtr(sig) => sig.visit(visitor),
|
RigidTy::FnPtr(sig) => sig.visit(visitor),
|
||||||
RigidTy::Closure(_, args) => args.visit(visitor),
|
RigidTy::Closure(_, args) => args.visit(visitor),
|
||||||
RigidTy::Coroutine(_, args, _) => args.visit(visitor),
|
RigidTy::Coroutine(_, args, _) => args.visit(visitor),
|
||||||
|
RigidTy::CoroutineWitness(_, args) => args.visit(visitor),
|
||||||
RigidTy::Dynamic(pred, r, _) => {
|
RigidTy::Dynamic(pred, r, _) => {
|
||||||
pred.visit(visitor)?;
|
pred.visit(visitor)?;
|
||||||
r.visit(visitor)
|
r.visit(visitor)
|
||||||
|
Loading…
Reference in New Issue
Block a user