Skip to content

Commit f2c12f4

Browse files
committed
Auto merge of #49433 - varkor:metadata-skip-mir-opt, r=<try>
Skip MIR encoding for cargo check Resolves #48662. r? @michaelwoerister
2 parents 67712d7 + 5576ce8 commit f2c12f4

File tree

3 files changed

+14
-3
lines changed

3 files changed

+14
-3
lines changed

src/librustc/session/config.rs

+4
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,10 @@ impl OutputTypes {
246246
self.0.values()
247247
}
248248

249+
pub fn len(&self) -> usize {
250+
self.0.len()
251+
}
252+
249253
// True if any of the output types require codegen or linking.
250254
pub fn should_trans(&self) -> bool {
251255
self.0.keys().any(|k| match *k {

src/librustc_driver/driver.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ pub fn compile_input(trans: Box<TransCrate>,
168168

169169
write_out_deps(sess, &outputs, &output_paths);
170170
if sess.opts.output_types.contains_key(&OutputType::DepInfo) &&
171-
sess.opts.output_types.keys().count() == 1 {
171+
sess.opts.output_types.len() == 1 {
172172
return Ok(())
173173
}
174174

src/librustc_metadata/encoder.rs

+9-2
Original file line numberDiff line numberDiff line change
@@ -834,6 +834,11 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
834834
}
835835
}
836836

837+
fn metadata_output_only(&self) -> bool {
838+
// MIR optimisation can be skipped when we're just interested in the metadata.
839+
!self.tcx.sess.opts.output_types.should_trans()
840+
}
841+
837842
fn encode_info_for_impl_item(&mut self, def_id: DefId) -> Entry<'tcx> {
838843
debug!("IsolatedEncoder::encode_info_for_impl_item({:?})", def_id);
839844
let tcx = self.tcx;
@@ -878,7 +883,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
878883
} else if let hir::ImplItemKind::Method(ref sig, body) = ast_item.node {
879884
let generics = self.tcx.generics_of(def_id);
880885
let types = generics.parent_types as usize + generics.types.len();
881-
let needs_inline = types > 0 || tcx.trans_fn_attrs(def_id).requests_inline();
886+
let needs_inline = (types > 0 || tcx.trans_fn_attrs(def_id).requests_inline()) &&
887+
!self.metadata_output_only();
882888
let is_const_fn = sig.constness == hir::Constness::Const;
883889
let ast = if is_const_fn { Some(body) } else { None };
884890
let always_encode_mir = self.tcx.sess.opts.debugging_opts.always_encode_mir;
@@ -1169,7 +1175,8 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
11691175
hir::ItemConst(..) => self.encode_optimized_mir(def_id),
11701176
hir::ItemFn(_, _, constness, _, ref generics, _) => {
11711177
let has_tps = generics.ty_params().next().is_some();
1172-
let needs_inline = has_tps || tcx.trans_fn_attrs(def_id).requests_inline();
1178+
let needs_inline = (has_tps || tcx.trans_fn_attrs(def_id).requests_inline()) &&
1179+
!self.metadata_output_only();
11731180
let always_encode_mir = self.tcx.sess.opts.debugging_opts.always_encode_mir;
11741181
if needs_inline || constness == hir::Constness::Const || always_encode_mir {
11751182
self.encode_optimized_mir(def_id)

0 commit comments

Comments
 (0)