// 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);
// 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);
};
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);
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();