From a7f1d12ae4e0adbabc4c371d9959e4adeb4d75dd Mon Sep 17 00:00:00 2001 From: Ruud van Asseldonk Date: Wed, 27 Jan 2016 22:38:01 +0100 Subject: [PATCH] Avoid ICE if environment variable is not set Rustdoc could trigger a code path that relied on the $CFG_COMPILER_HOST_TRIPLE environment variable being set, causing an ICE if it was not. This fixes that, emitting an error instead of crashing. --- src/libsyntax/diagnostics/plugin.rs | 32 ++++++++++++++++------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/libsyntax/diagnostics/plugin.rs b/src/libsyntax/diagnostics/plugin.rs index d17ca3892dc68..6e389e83591ea 100644 --- a/src/libsyntax/diagnostics/plugin.rs +++ b/src/libsyntax/diagnostics/plugin.rs @@ -168,20 +168,24 @@ pub fn expand_build_diagnostic_array<'cx>(ecx: &'cx mut ExtCtxt, }; // Output error metadata to `tmp/extended-errors//.json` - let target_triple = env::var("CFG_COMPILER_HOST_TRIPLE") - .ok().expect("unable to determine target arch from $CFG_COMPILER_HOST_TRIPLE"); - - with_registered_diagnostics(|diagnostics| { - if let Err(e) = output_metadata(ecx, - &target_triple, - &crate_name.name.as_str(), - &diagnostics) { - ecx.span_bug(span, &format!( - "error writing metadata for triple `{}` and crate `{}`, error: {}, cause: {:?}", - target_triple, crate_name, e.description(), e.cause() - )); - } - }); + if let Ok(target_triple) = env::var("CFG_COMPILER_HOST_TRIPLE") { + with_registered_diagnostics(|diagnostics| { + if let Err(e) = output_metadata(ecx, + &target_triple, + &crate_name.name.as_str(), + &diagnostics) { + ecx.span_bug(span, &format!( + "error writing metadata for triple `{}` and crate `{}`, error: {}, \ + cause: {:?}", + target_triple, crate_name, e.description(), e.cause() + )); + } + }); + } else { + ecx.span_err(span, &format!( + "failed to write metadata for crate `{}` because $CFG_COMPILER_HOST_TRIPLE is not set", + crate_name)); + } // Construct the output expression. let (count, expr) =