Skip to content

Commit d390c92

Browse files
committed
metadata: only encode optimized MIR for closures when required
The metadata encoder unconditionally encoded the optimized MIR for closures, including during check builds, whereas this is usually limited to cases of actual codegen.
1 parent 6b17a76 commit d390c92

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

compiler/rustc_metadata/src/rmeta/encoder.rs

+14-2
Original file line numberDiff line numberDiff line change
@@ -1519,8 +1519,20 @@ impl EncodeContext<'a, 'tcx> {
15191519
record!(self.tables.fn_sig[def_id] <- substs.as_closure().sig());
15201520
}
15211521
self.encode_generics(def_id.to_def_id());
1522-
self.encode_optimized_mir(def_id);
1523-
self.encode_promoted_mir(def_id);
1522+
1523+
let mir = {
1524+
let generics = self.tcx.generics_of(def_id);
1525+
let needs_inline = (generics.requires_monomorphization(self.tcx)
1526+
|| self.tcx.codegen_fn_attrs(def_id).requests_inline())
1527+
&& !self.metadata_output_only();
1528+
let is_generator = ty.is_generator();
1529+
let always_encode_mir = self.tcx.sess.opts.debugging_opts.always_encode_mir;
1530+
needs_inline || is_generator || always_encode_mir
1531+
};
1532+
if mir {
1533+
self.encode_optimized_mir(def_id);
1534+
self.encode_promoted_mir(def_id);
1535+
}
15241536
}
15251537

15261538
fn encode_info_for_anon_const(&mut self, def_id: LocalDefId) {

0 commit comments

Comments
 (0)