about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJonas Schievink <jonasschievink@gmail.com>2019-07-26 23:31:02 +0200
committerJonas Schievink <jonasschievink@gmail.com>2019-08-30 12:34:20 +0200
commit3e2d4d28b1c1a96e7c7482ae3e82fbf81505e8a7 (patch)
treec7057b839a95c0228a25b84926dc5084364b603b
parent035333993d09df69dd82723881b05cda5f0cde07 (diff)
downloadrust-3e2d4d28b1c1a96e7c7482ae3e82fbf81505e8a7.tar.gz
rust-3e2d4d28b1c1a96e7c7482ae3e82fbf81505e8a7.zip
Document the ICE hook and make it more flexible
-rw-r--r--src/librustc_driver/lib.rs15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/librustc_driver/lib.rs b/src/librustc_driver/lib.rs
index 0fd00af0bd0..97542a0e84e 100644
--- a/src/librustc_driver/lib.rs
+++ b/src/librustc_driver/lib.rs
@@ -1161,12 +1161,18 @@ pub fn catch_fatal_errors<F: FnOnce() -> R, R>(f: F) -> Result<R, ErrorReported>
 lazy_static! {
     static ref DEFAULT_HOOK: Box<dyn Fn(&panic::PanicInfo<'_>) + Sync + Send + 'static> = {
         let hook = panic::take_hook();
-        panic::set_hook(Box::new(report_ice));
+        panic::set_hook(Box::new(|info| report_ice(info, BUG_REPORT_URL)));
         hook
     };
 }
 
-pub fn report_ice(info: &panic::PanicInfo<'_>) {
+/// Prints the ICE message, including backtrace and query stack.
+///
+/// The message will point the user at `bug_report_url` to report the ICE.
+///
+/// When `install_ice_hook` is called, this function will be called as the panic
+/// hook.
+pub fn report_ice(info: &panic::PanicInfo<'_>, bug_report_url: &str) {
     // Invoke the default handler, which prints the actual panic message and optionally a backtrace
     (*DEFAULT_HOOK)(info);
 
@@ -1192,7 +1198,7 @@ pub fn report_ice(info: &panic::PanicInfo<'_>) {
 
     let mut xs: Vec<Cow<'static, str>> = vec![
         "the compiler unexpectedly panicked. this is a bug.".into(),
-        format!("we would appreciate a bug report: {}", BUG_REPORT_URL).into(),
+        format!("we would appreciate a bug report: {}", bug_report_url).into(),
         format!("rustc {} running on {}",
                 option_env!("CFG_VERSION").unwrap_or("unknown_version"),
                 config::host_triple()).into(),
@@ -1231,6 +1237,9 @@ pub fn report_ice(info: &panic::PanicInfo<'_>) {
     }
 }
 
+/// Installs a panic hook that will print the ICE message on unexpected panics.
+///
+/// A custom rustc driver can skip calling this to set up a custom ICE hook.
 pub fn install_ice_hook() {
     lazy_static::initialize(&DEFAULT_HOOK);
 }