Skip to content

Commit

Permalink
Rollup merge of rust-lang#39184 - michaelwoerister:no-trans-items-for…
Browse files Browse the repository at this point in the history
…-meta-crates, r=eddyb

trans: Exit earlier from base::trans_crate() when compiling rmeta crates.

Fixes rust-lang#38964.
r? @eddyb
cc @nrc
  • Loading branch information
alexcrichton committed Jan 20, 2017
2 parents 465a0d1 + b9765c0 commit c2f1b02
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 18 deletions.
5 changes: 3 additions & 2 deletions src/librustc_trans/back/write.rs
Original file line number Diff line number Diff line change
Expand Up @@ -667,7 +667,8 @@ pub fn run_passes(sess: &Session,

// Sanity check
assert!(trans.modules.len() == sess.opts.cg.codegen_units ||
sess.opts.debugging_opts.incremental.is_some());
sess.opts.debugging_opts.incremental.is_some() ||
!sess.opts.output_types.should_trans());

let tm = create_target_machine(sess);

Expand Down Expand Up @@ -756,7 +757,7 @@ pub fn run_passes(sess: &Session,
// the compiler decides the number of codegen units (and will
// potentially create hundreds of them).
let num_workers = work_items.len() - 1;
if num_workers == 1 {
if num_workers <= 1 {
run_work_singlethreaded(sess, &trans.exported_symbols, work_items);
} else {
run_work_multithreaded(sess, work_items, num_workers);
Expand Down
33 changes: 17 additions & 16 deletions src/librustc_trans/base.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1145,6 +1145,23 @@ pub fn trans_crate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
};
let no_builtins = attr::contains_name(&krate.attrs, "no_builtins");

// Skip crate items and just output metadata in -Z no-trans mode.
if tcx.sess.opts.debugging_opts.no_trans ||
!tcx.sess.opts.output_types.should_trans() {
let empty_exported_symbols = ExportedSymbols::empty();
let linker_info = LinkerInfo::new(&shared_ccx, &empty_exported_symbols);
return CrateTranslation {
modules: vec![],
metadata_module: metadata_module,
link: link_meta,
metadata: metadata,
exported_symbols: empty_exported_symbols,
no_builtins: no_builtins,
linker_info: linker_info,
windows_subsystem: None,
};
}

// Run the translation item collector and partition the collected items into
// codegen units.
let (codegen_units, symbol_map) = collect_and_partition_translation_items(&shared_ccx);
Expand Down Expand Up @@ -1181,22 +1198,6 @@ pub fn trans_crate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,

assert_module_sources::assert_module_sources(tcx, &modules);

// Skip crate items and just output metadata in -Z no-trans mode.
if tcx.sess.opts.debugging_opts.no_trans ||
tcx.sess.opts.output_types.contains_key(&config::OutputType::Metadata) {
let linker_info = LinkerInfo::new(&shared_ccx, &ExportedSymbols::empty());
return CrateTranslation {
modules: modules,
metadata_module: metadata_module,
link: link_meta,
metadata: metadata,
exported_symbols: ExportedSymbols::empty(),
no_builtins: no_builtins,
linker_info: linker_info,
windows_subsystem: None,
};
}

// Instantiate translation items without filling out definitions yet...
for ccx in crate_context_list.iter_need_trans() {
let cgu = ccx.codegen_unit();
Expand Down

0 comments on commit c2f1b02

Please sign in to comment.