mirror of
https://github.com/rust-lang/rust
synced 2024-09-06 01:11:17 +00:00
Remove an unchecked_claim_error_was_emitted
call.
When `catch_fatal_errors` catches a `FatalErrorMarker`, it returns an `ErrorGuaranteed` that is conjured out of thin air with `unchecked_claim_error_was_emitted`. But that `ErrorGuaranteed` is never used. This commit changes it to instead conjure a `FatalError` out of thin air. (A non-deprecated action!) This makes more sense because `FatalError` and `FatalErrorMarker` are a natural pairing -- a `FatalErrorMarker` is created by calling `FatalError::raise`, so this is effectively getting back the original `FatalError`. This requires a tiny change in `catch_with_exit_code`. The old result of the `catch_fatal_errors` call there was `Result<Result<(), ErrorGuaranteed>, ErrorGuaranteed>` which could be `flatten`ed into `Result<(), ErrorGuaranteed>`. The new result of the `catch_fatal_errors` calls is `Result<Result<(), ErrorGuaranteed>, FatalError>`, which can't be `flatten`ed but is still easily matched for the success case.
This commit is contained in:
parent
8d1c20a539
commit
e55df623ea
|
@ -24,7 +24,9 @@
|
||||||
get_resident_set_size, print_time_passes_entry, TimePassesFormat,
|
get_resident_set_size, print_time_passes_entry, TimePassesFormat,
|
||||||
};
|
};
|
||||||
use rustc_errors::registry::Registry;
|
use rustc_errors::registry::Registry;
|
||||||
use rustc_errors::{markdown, ColorConfig, DiagCtxt, ErrCode, ErrorGuaranteed, PResult};
|
use rustc_errors::{
|
||||||
|
markdown, ColorConfig, DiagCtxt, ErrCode, ErrorGuaranteed, FatalError, PResult,
|
||||||
|
};
|
||||||
use rustc_feature::find_gated_cfg;
|
use rustc_feature::find_gated_cfg;
|
||||||
use rustc_interface::util::{self, collect_crate_types, get_codegen_backend};
|
use rustc_interface::util::{self, collect_crate_types, get_codegen_backend};
|
||||||
use rustc_interface::{interface, Queries};
|
use rustc_interface::{interface, Queries};
|
||||||
|
@ -1231,11 +1233,10 @@ fn parse_crate_attrs<'a>(sess: &'a Session) -> PResult<'a, ast::AttrVec> {
|
||||||
/// The compiler currently unwinds with a special sentinel value to abort
|
/// The compiler currently unwinds with a special sentinel value to abort
|
||||||
/// compilation on fatal errors. This function catches that sentinel and turns
|
/// compilation on fatal errors. This function catches that sentinel and turns
|
||||||
/// the panic into a `Result` instead.
|
/// the panic into a `Result` instead.
|
||||||
pub fn catch_fatal_errors<F: FnOnce() -> R, R>(f: F) -> Result<R, ErrorGuaranteed> {
|
pub fn catch_fatal_errors<F: FnOnce() -> R, R>(f: F) -> Result<R, FatalError> {
|
||||||
catch_unwind(panic::AssertUnwindSafe(f)).map_err(|value| {
|
catch_unwind(panic::AssertUnwindSafe(f)).map_err(|value| {
|
||||||
if value.is::<rustc_errors::FatalErrorMarker>() {
|
if value.is::<rustc_errors::FatalErrorMarker>() {
|
||||||
#[allow(deprecated)]
|
FatalError
|
||||||
ErrorGuaranteed::unchecked_claim_error_was_emitted()
|
|
||||||
} else {
|
} else {
|
||||||
panic::resume_unwind(value);
|
panic::resume_unwind(value);
|
||||||
}
|
}
|
||||||
|
@ -1245,9 +1246,9 @@ pub fn catch_fatal_errors<F: FnOnce() -> R, R>(f: F) -> Result<R, ErrorGuarantee
|
||||||
/// Variant of `catch_fatal_errors` for the `interface::Result` return type
|
/// Variant of `catch_fatal_errors` for the `interface::Result` return type
|
||||||
/// that also computes the exit code.
|
/// that also computes the exit code.
|
||||||
pub fn catch_with_exit_code(f: impl FnOnce() -> interface::Result<()>) -> i32 {
|
pub fn catch_with_exit_code(f: impl FnOnce() -> interface::Result<()>) -> i32 {
|
||||||
match catch_fatal_errors(f).flatten() {
|
match catch_fatal_errors(f) {
|
||||||
Ok(()) => EXIT_SUCCESS,
|
Ok(Ok(())) => EXIT_SUCCESS,
|
||||||
Err(_) => EXIT_FAILURE,
|
_ => EXIT_FAILURE,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue