diff --git a/src/librustc_back/target/mod.rs b/src/librustc_back/target/mod.rs index 84cb6c9ba7de3..f5314809228b5 100644 --- a/src/librustc_back/target/mod.rs +++ b/src/librustc_back/target/mod.rs @@ -71,7 +71,7 @@ macro_rules! supported_targets { $(mod $module;)* /// List of supported targets - pub const TARGETS: &'static [&'static str] = &[$($triple),*]; + const TARGETS: &'static [&'static str] = &[$($triple),*]; fn load_specific(target: &str) -> TargetResult { match target { @@ -91,6 +91,14 @@ macro_rules! supported_targets { } } + pub fn get_targets() -> Box> { + Box::new(TARGETS.iter().filter_map(|t| -> Option { + load_specific(t) + .map(|t| t.llvm_target) + .ok() + })) + } + #[cfg(test)] mod test_json_encode_decode { use serialize::json::ToJson; diff --git a/src/librustc_driver/lib.rs b/src/librustc_driver/lib.rs index 0a8df923b846b..eff920608dc2a 100644 --- a/src/librustc_driver/lib.rs +++ b/src/librustc_driver/lib.rs @@ -609,7 +609,7 @@ impl RustcDefaultCalls { for req in &sess.opts.prints { match *req { PrintRequest::TargetList => { - let mut targets = rustc_back::target::TARGETS.to_vec(); + let mut targets = rustc_back::target::get_targets().collect::>(); targets.sort(); println!("{}", targets.join("\n")); },