Rollup merge of #121122 - compiler-errors:identical-layouts, r=oli-obk
Enforce coroutine-closure layouts are identical Enforce that for an async closure, the by-ref and by-move coroutine layouts are identical. This is just a sanity check to make sure that optimizations aren't doing anything fishy. r? oli-obk
This commit is contained in:
commit
829b59a47d
2 changed files with 24 additions and 2 deletions
|
@ -86,7 +86,8 @@ rustc_index::newtype_index! {
|
|||
pub struct CoroutineSavedLocal {}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, TyEncodable, TyDecodable, HashStable, TypeFoldable, TypeVisitable)]
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
#[derive(TyEncodable, TyDecodable, HashStable, TypeFoldable, TypeVisitable)]
|
||||
pub struct CoroutineSavedTy<'tcx> {
|
||||
pub ty: Ty<'tcx>,
|
||||
/// Source info corresponding to the local in the original MIR body.
|
||||
|
@ -96,7 +97,8 @@ pub struct CoroutineSavedTy<'tcx> {
|
|||
}
|
||||
|
||||
/// The layout of coroutine state.
|
||||
#[derive(Clone, TyEncodable, TyDecodable, HashStable, TypeFoldable, TypeVisitable)]
|
||||
#[derive(Clone, PartialEq, Eq)]
|
||||
#[derive(TyEncodable, TyDecodable, HashStable, TypeFoldable, TypeVisitable)]
|
||||
pub struct CoroutineLayout<'tcx> {
|
||||
/// The type of every local stored inside the coroutine.
|
||||
pub field_tys: IndexVec<CoroutineSavedLocal, CoroutineSavedTy<'tcx>>,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue