Skip to content

Commit 400cb9a

Browse files
committed
Separate witness type computation from the generator transform.
1 parent e2387ad commit 400cb9a

File tree

9 files changed

+304
-31
lines changed

9 files changed

+304
-31
lines changed

compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ provide! { tcx, def_id, other, cdata,
202202
thir_abstract_const => { table }
203203
optimized_mir => { table }
204204
mir_for_ctfe => { table }
205+
mir_generator_witnesses => { table }
205206
promoted_mir => { table }
206207
def_span => { table }
207208
def_ident_span => { table }

compiler/rustc_metadata/src/rmeta/encoder.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1414,6 +1414,10 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
14141414
debug!("EntryBuilder::encode_mir({:?})", def_id);
14151415
if encode_opt {
14161416
record!(self.tables.optimized_mir[def_id.to_def_id()] <- tcx.optimized_mir(def_id));
1417+
1418+
if let DefKind::Generator = self.tcx.def_kind(def_id) {
1419+
record!(self.tables.mir_generator_witnesses[def_id.to_def_id()] <- tcx.mir_generator_witnesses(def_id));
1420+
}
14171421
}
14181422
if encode_const {
14191423
record!(self.tables.mir_for_ctfe[def_id.to_def_id()] <- tcx.mir_for_ctfe(def_id));

compiler/rustc_metadata/src/rmeta/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,7 @@ define_tables! {
376376
object_lifetime_default: Table<DefIndex, LazyValue<ObjectLifetimeDefault>>,
377377
optimized_mir: Table<DefIndex, LazyValue<mir::Body<'static>>>,
378378
mir_for_ctfe: Table<DefIndex, LazyValue<mir::Body<'static>>>,
379+
mir_generator_witnesses: Table<DefIndex, LazyValue<mir::GeneratorLayout<'static>>>,
379380
promoted_mir: Table<DefIndex, LazyValue<IndexVec<mir::Promoted, mir::Body<'static>>>>,
380381
// FIXME(compiler-errors): Why isn't this a LazyArray?
381382
thir_abstract_const: Table<DefIndex, LazyValue<ty::Const<'static>>>,

compiler/rustc_middle/src/query/mod.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,13 @@ rustc_queries! {
471471
}
472472
}
473473

474+
query mir_generator_witnesses(key: DefId) -> mir::GeneratorLayout<'tcx> {
475+
arena_cache
476+
desc { |tcx| "generator witness types for `{}`", tcx.def_path_str(key) }
477+
cache_on_disk_if { key.is_local() }
478+
separate_provide_extern
479+
}
480+
474481
/// MIR after our optimization passes have run. This is MIR that is ready
475482
/// for codegen. This is also the only query that can fetch non-local MIR, at present.
476483
query optimized_mir(key: DefId) -> &'tcx mir::Body<'tcx> {

compiler/rustc_middle/src/ty/parameterized.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ macro_rules! parameterized_over_tcx {
117117
parameterized_over_tcx! {
118118
crate::middle::exported_symbols::ExportedSymbol,
119119
crate::mir::Body,
120+
crate::mir::GeneratorLayout,
120121
ty::Ty,
121122
ty::FnSig,
122123
ty::GenericPredicates,

compiler/rustc_mir_build/src/build/matches/mod.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1747,8 +1747,9 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
17471747
};
17481748
let fake_borrow_deref_ty = matched_place.ty(&self.local_decls, tcx).ty;
17491749
let fake_borrow_ty = tcx.mk_imm_ref(tcx.lifetimes.re_erased, fake_borrow_deref_ty);
1750-
let fake_borrow_temp =
1751-
self.local_decls.push(LocalDecl::new(fake_borrow_ty, temp_span));
1750+
let mut fake_borrow_temp = LocalDecl::new(fake_borrow_ty, temp_span);
1751+
fake_borrow_temp.internal = self.local_decls[matched_place.local].internal;
1752+
let fake_borrow_temp = self.local_decls.push(fake_borrow_temp);
17521753

17531754
(matched_place, fake_borrow_temp)
17541755
})

0 commit comments

Comments
 (0)