mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-01 23:12:02 +00:00
260ae70140
Stashed errors used to be counted as errors, but could then be cancelled, leading to `ErrorGuaranteed` soundness holes. #120828 changed that, closing the soundness hole. But it introduced other difficulties because you sometimes have to account for pending stashed errors when making decisions about whether errors have occured/will occur and it's easy to overlook these. This commit aims for a middle ground. - Stashed errors (not warnings) are counted immediately as emitted errors, avoiding the possibility of forgetting to consider them. - The ability to cancel (or downgrade) stashed errors is eliminated, by disallowing the use of `steal_diagnostic` with errors, and introducing the more restrictive methods `try_steal_{modify,replace}_and_emit_err` that can be used instead. Other things: - `DiagnosticBuilder::stash` and `DiagCtxt::stash_diagnostic` now both return `Option<ErrorGuaranteed>`, which enables the removal of two `delayed_bug` calls and one `Ty::new_error_with_message` call. This is possible because we store error guarantees in `DiagCtxt::stashed_diagnostics`. - Storing the guarantees also saves us having to maintain a counter. - Calls to the `stashed_err_count` method are no longer necessary alongside calls to `has_errors`, which is a nice simplification, and eliminates two more `span_delayed_bug` calls and one FIXME comment. - Tests are added for three of the four fixed PRs mentioned below. - `issue-121108.rs`'s output improved slightly, omitting a non-useful error message. Fixes #121451. Fixes #121477. Fixes #121504. Fixes #121508. |
||
---|---|---|
.. | ||
auxiliary | ||
foreign-mod-src | ||
foreign-src | ||
foreign2.rs | ||
foreign-fn-linkname.rs | ||
foreign-int-types.rs | ||
foreign-mod-unused-const.rs | ||
foreign-pub-super.rs | ||
foreign-truncated-arguments.rs | ||
issue-74120-lowering-of-ffi-block-bodies.rs | ||
issue-74120-lowering-of-ffi-block-bodies.stderr | ||
issue-91370-foreign-fn-block-impl.rs | ||
issue-91370-foreign-fn-block-impl.stderr | ||
issue-99276-same-type-lifetimes.rs | ||
nil-decl-in-foreign.rs | ||
stashed-issue-121451.rs | ||
stashed-issue-121451.stderr |