diff options
| -rw-r--r-- | src/librustdoc/core.rs | 19 | ||||
| -rw-r--r-- | src/librustdoc/lib.rs | 13 | ||||
| -rw-r--r-- | src/test/rustdoc-ui/treat-err-as-bug.rs | 13 | ||||
| -rw-r--r-- | src/test/rustdoc-ui/treat-err-as-bug.stderr | 21 |
4 files changed, 55 insertions, 11 deletions
diff --git a/src/librustdoc/core.rs b/src/librustdoc/core.rs index a312913a69c..2feeecb388f 100644 --- a/src/librustdoc/core.rs +++ b/src/librustdoc/core.rs @@ -260,9 +260,10 @@ impl DocAccessLevels for AccessLevels<DefId> { /// /// If the given `error_format` is `ErrorOutputType::Json` and no `SourceMap` is given, a new one /// will be created for the handler. -pub fn new_handler(error_format: ErrorOutputType, source_map: Option<Lrc<source_map::SourceMap>>) - -> errors::Handler -{ +pub fn new_handler(error_format: ErrorOutputType, + source_map: Option<Lrc<source_map::SourceMap>>, + treat_err_as_bug: bool, +) -> errors::Handler { // rustdoc doesn't override (or allow to override) anything from this that is relevant here, so // stick to the defaults let sessopts = Options::default(); @@ -299,7 +300,7 @@ pub fn new_handler(error_format: ErrorOutputType, source_map: Option<Lrc<source_ emitter, errors::HandlerFlags { can_emit_warnings: true, - treat_err_as_bug: false, + treat_err_as_bug, report_delayed_bugs: false, external_macro_backtrace: false, ..Default::default() @@ -323,9 +324,9 @@ pub fn run_core(search_paths: SearchPaths, lint_cap: Option<lint::Level>, describe_lints: bool, mut manual_passes: Vec<String>, - mut default_passes: passes::DefaultPassOption) - -> (clean::Crate, RenderInfo, Vec<String>) -{ + mut default_passes: passes::DefaultPassOption, + treat_err_as_bug: bool, +) -> (clean::Crate, RenderInfo, Vec<String>) { // Parse, resolve, and typecheck the given crate. let cpath = match input { @@ -388,7 +389,9 @@ pub fn run_core(search_paths: SearchPaths, }; driver::spawn_thread_pool(sessopts, move |sessopts| { let source_map = Lrc::new(source_map::SourceMap::new(sessopts.file_path_mapping())); - let diagnostic_handler = new_handler(error_format, Some(source_map.clone())); + let diagnostic_handler = new_handler(error_format, + Some(source_map.clone()), + treat_err_as_bug); let mut sess = session::build_session_( sessopts, cpath, diagnostic_handler, source_map, diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs index bc471d42704..5f03ee5f68a 100644 --- a/src/librustdoc/lib.rs +++ b/src/librustdoc/lib.rs @@ -404,8 +404,11 @@ fn main_args(args: &[String]) -> isize { `short` (instead was `{}`)", arg)); } }; + let treat_err_as_bug = matches.opt_strs("Z").iter().any(|x| { + *x == "treat-err-as-bug" + }); - let diag = core::new_handler(error_format, None); + let diag = core::new_handler(error_format, None, treat_err_as_bug); // check for deprecated options check_deprecated_options(&matches, &diag); @@ -560,7 +563,7 @@ fn main_args(args: &[String]) -> isize { let res = acquire_input(PathBuf::from(input), externs, edition, cg, &matches, error_format, move |out| { let Output { krate, passes, renderinfo } = out; - let diag = core::new_handler(error_format, None); + let diag = core::new_handler(error_format, None, treat_err_as_bug); info!("going to format"); match output_format.as_ref().map(|s| &**s) { Some("html") | None => { @@ -691,6 +694,9 @@ where R: 'static + Send, let force_unstable_if_unmarked = matches.opt_strs("Z").iter().any(|x| { *x == "force-unstable-if-unmarked" }); + let treat_err_as_bug = matches.opt_strs("Z").iter().any(|x| { + *x == "treat-err-as-bug" + }); let (lint_opts, describe_lints, lint_cap) = get_cmd_lint_options(matches, error_format); @@ -703,7 +709,8 @@ where R: 'static + Send, core::run_core(paths, cfgs, externs, Input::File(cratefile), triple, maybe_sysroot, display_warnings, crate_name.clone(), force_unstable_if_unmarked, edition, cg, error_format, - lint_opts, lint_cap, describe_lints, manual_passes, default_passes); + lint_opts, lint_cap, describe_lints, manual_passes, default_passes, + treat_err_as_bug); info!("finished with rustc"); diff --git a/src/test/rustdoc-ui/treat-err-as-bug.rs b/src/test/rustdoc-ui/treat-err-as-bug.rs new file mode 100644 index 00000000000..0c4c5dc316e --- /dev/null +++ b/src/test/rustdoc-ui/treat-err-as-bug.rs @@ -0,0 +1,13 @@ +// Copyright 2013-2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags: -Ztreat-err-as-bug --error-format=human + +pub fn foo() { diff --git a/src/test/rustdoc-ui/treat-err-as-bug.stderr b/src/test/rustdoc-ui/treat-err-as-bug.stderr new file mode 100644 index 00000000000..d96415ed050 --- /dev/null +++ b/src/test/rustdoc-ui/treat-err-as-bug.stderr @@ -0,0 +1,21 @@ +error: this file contains an un-closed delimiter + --> $DIR/treat-err-as-bug.rs:13:16 + | +13 | pub fn foo() { + | - ^ + | | + | un-closed delimiter + +thread '<unnamed>' panicked at 'encountered error with `-Z treat_err_as_bug', librustc_errors/lib.rs:486:13 +note: Run with `RUST_BACKTRACE=1` for a backtrace. + +error: internal compiler error: unexpected panic + +note: the compiler unexpectedly panicked. this is a bug. + +note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports + +note: rustc 1.30.0-dev running on x86_64-apple-darwin + +note: compiler flags: -Z ui-testing -Z unstable-options -Z treat-err-as-bug + |
