diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs index 0ad53529dd11d..08266981829f0 100644 --- a/src/librustc/session/config.rs +++ b/src/librustc/session/config.rs @@ -76,18 +76,7 @@ pub enum OutputType { Object, Exe, DepInfo, -} - -#[derive(Clone, Copy, Debug, PartialEq, Eq)] -pub enum ErrorOutputType { - HumanReadable(ColorConfig), - Json, -} - -impl Default for ErrorOutputType { - fn default() -> ErrorOutputType { - ErrorOutputType::HumanReadable(ColorConfig::Auto) - } + Metadata } impl OutputType { @@ -98,7 +87,8 @@ impl OutputType { OutputType::Bitcode | OutputType::Assembly | OutputType::LlvmAssembly | - OutputType::Object => false, + OutputType::Object | + OutputType::Metadata => false, } } @@ -110,6 +100,7 @@ impl OutputType { OutputType::Object => "obj", OutputType::Exe => "link", OutputType::DepInfo => "dep-info", + OutputType::Metadata => "metadata", } } @@ -121,10 +112,23 @@ impl OutputType { OutputType::Object => "o", OutputType::DepInfo => "d", OutputType::Exe => "", + OutputType::Metadata => "", } } } +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum ErrorOutputType { + HumanReadable(ColorConfig), + Json, +} + +impl Default for ErrorOutputType { + fn default() -> ErrorOutputType { + ErrorOutputType::HumanReadable(ColorConfig::Auto) + } +} + // Use tree-based collections to cheaply get a deterministic Hash implementation. // DO NOT switch BTreeMap out for an unsorted container type! That would break // dependency tracking for commandline arguments. @@ -1329,6 +1333,7 @@ pub fn build_session_options_and_crate_config(matches: &getopts::Matches) "obj" => OutputType::Object, "link" => OutputType::Exe, "dep-info" => OutputType::DepInfo, + "metadata" => OutputType::Metadata, part => { early_error(error_format, &format!("unknown emission type: `{}`", part)) diff --git a/src/librustc_trans/back/link.rs b/src/librustc_trans/back/link.rs index e46bdbb5ccf4a..808dbcce24e66 100644 --- a/src/librustc_trans/back/link.rs +++ b/src/librustc_trans/back/link.rs @@ -190,7 +190,8 @@ pub fn link_binary(sess: &Session, let mut out_filenames = Vec::new(); for &crate_type in sess.crate_types.borrow().iter() { // Ignore executable crates if we have -Z no-trans, as they will error. - if sess.opts.debugging_opts.no_trans && + if (sess.opts.debugging_opts.no_trans || + sess.opts.output_types.keys().all(|k| k == &OutputType::Metadata)) && crate_type == config::CrateTypeExecutable { continue; } diff --git a/src/librustc_trans/back/write.rs b/src/librustc_trans/back/write.rs index 04b814e2b9772..9e09676aa2846 100644 --- a/src/librustc_trans/back/write.rs +++ b/src/librustc_trans/back/write.rs @@ -708,7 +708,7 @@ pub fn run_passes(sess: &Session, modules_config.emit_obj = true; metadata_config.emit_obj = true; }, - OutputType::DepInfo => {} + OutputType::DepInfo | OutputType::Metadata => {} } } @@ -845,7 +845,8 @@ pub fn run_passes(sess: &Session, copy_if_one_unit(OutputType::Object, true); } OutputType::Exe | - OutputType::DepInfo => {} + OutputType::DepInfo | + OutputType::Metadata => {} } } let user_wants_bitcode = user_wants_bitcode; diff --git a/src/librustc_trans/base.rs b/src/librustc_trans/base.rs index 02aa7c069f9b3..e129d234376fa 100644 --- a/src/librustc_trans/base.rs +++ b/src/librustc_trans/base.rs @@ -45,7 +45,7 @@ use rustc::dep_graph::{DepNode, WorkProduct}; use rustc::hir::map as hir_map; use rustc::util::common::time; use rustc::mir::mir_map::MirMap; -use session::config::{self, NoDebugInfo}; +use session::config::{self, NoDebugInfo, OutputType}; use rustc_incremental::IncrementalHashesMap; use session::Session; use abi::{self, Abi, FnType}; @@ -1607,7 +1607,8 @@ 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 { + if tcx.sess.opts.debugging_opts.no_trans || + tcx.sess.opts.output_types.keys().all(|k| k == &OutputType::Metadata) { let linker_info = LinkerInfo::new(&shared_ccx, &[]); return CrateTranslation { modules: modules, diff --git a/src/tools/compiletest/src/runtest.rs b/src/tools/compiletest/src/runtest.rs index e10420bf291e7..b4571d8962f70 100644 --- a/src/tools/compiletest/src/runtest.rs +++ b/src/tools/compiletest/src/runtest.rs @@ -389,7 +389,8 @@ actual:\n\ // FIXME (#9639): This needs to handle non-utf8 paths let mut args = vec!("-".to_owned(), - "-Zno-trans".to_owned(), + "--emit".to_owned(), + "metadata".to_owned(), "--out-dir".to_owned(), out_dir.to_str().unwrap().to_owned(), format!("--target={}", target),