rust/compiler
Nicholas Nethercote 7619792107 Fix ErrorGuaranteed unsoundness with stash/steal.
When you stash an error, the error count is incremented. You can then
use the non-zero error count to get an `ErrorGuaranteed`. You can then
steal the error, which decrements the error count. You can then cancel
the error.

Example code:
```
fn unsound(dcx: &DiagCtxt) -> ErrorGuaranteed {
    let sp = rustc_span::DUMMY_SP;
    let k = rustc_errors::StashKey::Cycle;
    dcx.struct_err("bogus").stash(sp, k);           // increment error count on stash
    let guar = dcx.has_errors().unwrap();           // ErrorGuaranteed from error count > 0
    let err = dcx.steal_diagnostic(sp, k).unwrap(); // decrement error count on steal
    err.cancel();                                   // cancel error
    guar                                            // ErrorGuaranteed with no error emitted!
}
```

This commit fixes the problem in the simplest way: by not counting
stashed errors in `DiagCtxt::{err_count,has_errors}`.

However, just doing this without any other changes leads to over 40 ui
test failures. Mostly because of uninteresting extra errors (many saying
"type annotations needed" when type inference fails), and in a few
cases, due to delayed bugs causing ICEs when no normal errors are
printed.

To fix these, this commit adds `DiagCtxt::stashed_err_count`, and uses
it in three places alongside `DiagCtxt::{has_errors,err_count}`. It's
dodgy to rely on it, because unlike `DiagCtxt::err_count` it can go up
and down. But it's needed to preserve existing behaviour, and at least
the three places that need it are now obvious.
2024-02-09 13:50:03 +11:00
..
rustc Clean up rustc_*/Cargo.toml. 2023-10-30 08:46:02 +11:00
rustc_abi Fix rustc_abi build on stable 2024-01-16 21:15:31 +01:00
rustc_arena Fix Stable trait and its impls to work with the new with_tables 2024-01-19 09:42:51 +00:00
rustc_ast Add async bound modifier to enable async Fn bounds 2024-01-31 16:59:19 +00:00
rustc_ast_lowering Rollup merge of #120609 - petrochenkov:nousestem2, r=compiler-errors 2024-02-06 19:40:08 +01:00
rustc_ast_passes Correctly check never_type feature gating 2024-02-01 20:01:04 +01:00
rustc_ast_pretty Add async bound modifier to enable async Fn bounds 2024-01-31 16:59:19 +00:00
rustc_attr Stop using String for error codes. 2024-01-29 07:41:41 +11:00
rustc_baked_icu_data Bump cfg(bootstrap)s 2023-11-15 19:41:28 -05:00
rustc_borrowck Rollup merge of #120513 - compiler-errors:normalize-regions-for-nll, r=lcnr 2024-02-06 22:45:43 +01:00
rustc_builtin_macros Rollup merge of #120342 - oli-obk:track_errors6, r=nnethercote 2024-01-30 16:57:49 +01:00
rustc_codegen_cranelift Auto merge of #117372 - Amanieu:stdarch_update, r=Mark-Simulacrum 2024-02-05 15:41:40 +00:00
rustc_codegen_gcc Rollup merge of #120502 - clubby789:remove-ffi-returns-twice, r=compiler-errors 2024-02-06 22:45:42 +01:00
rustc_codegen_llvm Rollup merge of #119162 - heiher:direct-access-external-data, r=petrochenkov 2024-02-07 18:24:41 +01:00
rustc_codegen_ssa Rollup merge of #120502 - clubby789:remove-ffi-returns-twice, r=compiler-errors 2024-02-06 22:45:42 +01:00
rustc_const_eval Rollup merge of #120302 - oli-obk:const_intern_cleanups, r=RalfJung 2024-02-07 18:24:42 +01:00
rustc_data_structures Rollup merge of #119600 - aDotInTheVoid:comment-fix, r=compiler-errors 2024-02-05 06:37:14 +01:00
rustc_driver Bump cfg(bootstrap)s 2023-11-15 19:41:28 -05:00
rustc_driver_impl Remove an unchecked_claim_error_was_emitted call. 2024-02-07 18:57:38 +11:00
rustc_error_codes Rollup merge of #120502 - clubby789:remove-ffi-returns-twice, r=compiler-errors 2024-02-06 22:45:42 +01:00
rustc_error_messages Split Level::DelayedBug in two. 2024-02-05 10:03:01 +11:00
rustc_errors Fix ErrorGuaranteed unsoundness with stash/steal. 2024-02-09 13:50:03 +11:00
rustc_expand Add async bound modifier to enable async Fn bounds 2024-01-31 16:59:19 +00:00
rustc_feature Rollup merge of #120502 - clubby789:remove-ffi-returns-twice, r=compiler-errors 2024-02-06 22:45:42 +01:00
rustc_fluent_macro annotate-snippets: update to 0.10 2024-01-07 16:53:32 +03:00
rustc_fs_util Clean up rustc_*/Cargo.toml. 2023-10-30 08:46:02 +11:00
rustc_graphviz remove unused pub fn 2023-11-23 14:11:02 +03:00
rustc_hir Teach typeck/borrowck/solvers how to deal with async closures 2024-02-06 02:22:58 +00:00
rustc_hir_analysis Record coroutine kind in generics 2024-02-07 16:18:31 +00:00
rustc_hir_pretty hir: Use InferArg in ArrayLen::Infer 2024-01-28 02:04:39 +03:00
rustc_hir_typeck Fix ErrorGuaranteed unsoundness with stash/steal. 2024-02-09 13:50:03 +11:00
rustc_incremental hir: Simplify hir_owner_nodes query 2024-01-30 15:00:52 +03:00
rustc_index Auto merge of #120024 - Mark-Simulacrum:fast-union-merge, r=cjgillot 2024-01-27 22:26:37 +00:00
rustc_index_macros Restrict access to the private field of newtype indexes 2024-01-19 15:38:47 +00:00
rustc_infer Fix ErrorGuaranteed unsoundness with stash/steal. 2024-02-09 13:50:03 +11:00
rustc_interface Fix ErrorGuaranteed unsoundness with stash/steal. 2024-02-09 13:50:03 +11:00
rustc_lexer Use unescape_unicode for raw C string literals. 2024-01-25 12:28:11 +11:00
rustc_lint Rollup merge of #120435 - chenyukang:yukang-fix-120427-cfg-name, r=Urgau,Nilstrieb 2024-02-06 22:45:41 +01:00
rustc_lint_defs update the tracking issue for structural match violations 2024-02-05 20:36:11 +01:00
rustc_llvm Rollup merge of #120502 - clubby789:remove-ffi-returns-twice, r=compiler-errors 2024-02-06 22:45:42 +01:00
rustc_log rustc_log: provide a way to init logging based on the values, not names, of the env vars 2023-11-11 15:24:33 +01:00
rustc_macros Rollup merge of #120475 - Nilstrieb:cargo-build-my-a-, r=michaelwoerister 2024-01-30 16:57:50 +01:00
rustc_metadata rustc_metadata: fix typo 2024-02-05 14:20:15 +03:00
rustc_middle Auto merge of #120381 - fee1-dead-contrib:reconstify-add, r=compiler-errors 2024-02-08 00:04:14 +00:00
rustc_mir_build Rollup merge of #120423 - RalfJung:indirect-structural-match, r=petrochenkov 2024-02-06 22:45:41 +01:00
rustc_mir_dataflow More comments, final tweaks 2024-02-06 02:22:58 +00:00
rustc_mir_transform Rollup merge of #120733 - klensy:trait-const-fn, r=oli-obk 2024-02-07 18:24:45 +01:00
rustc_monomorphize Rollup merge of #120602 - klensy:mono-comment, r=nnethercote 2024-02-06 19:40:07 +01:00
rustc_next_trait_solver Add CoroutineClosure to TyKind, AggregateKind, UpvarArgs 2024-02-06 02:22:58 +00:00
rustc_parse Auto merge of #120392 - compiler-errors:async-bound-modifier, r=davidtwco,fmease 2024-02-06 00:45:11 +00:00
rustc_parse_format Rename the unescaping functions. 2024-01-25 12:28:11 +11:00
rustc_passes Rollup merge of #120470 - estebank:issue-54196, r=compiler-errors 2024-02-07 18:24:42 +01:00
rustc_pattern_analysis Rollup merge of #120633 - Nadrieril:place_info, r=compiler-errors 2024-02-07 18:24:44 +01:00
rustc_privacy Add CoroutineClosure to TyKind, AggregateKind, UpvarArgs 2024-02-06 02:22:58 +00:00
rustc_query_impl Remove unused features 2024-01-25 14:01:33 +00:00
rustc_query_system Stop using String for error codes. 2024-01-29 07:41:41 +11:00
rustc_resolve Rollup merge of #119939 - clubby789:static-const-generic-note, r=compiler-errors 2024-02-06 22:45:39 +01:00
rustc_serialize Remove unused features 2024-01-25 14:01:33 +00:00
rustc_session Rollup merge of #120735 - nnethercote:rm-some-unchecked_claims, r=oli-obk 2024-02-07 18:24:46 +01:00
rustc_smir Fix drop shim for AsyncFnOnce closure, AsyncFnMut shim for AsyncFn closure 2024-02-06 02:22:58 +00:00
rustc_span Rollup merge of #120735 - nnethercote:rm-some-unchecked_claims, r=oli-obk 2024-02-07 18:24:46 +01:00
rustc_symbol_mangling Fix drop shim for AsyncFnOnce closure, AsyncFnMut shim for AsyncFn closure 2024-02-06 02:22:58 +00:00
rustc_target Rollup merge of #119162 - heiher:direct-access-external-data, r=petrochenkov 2024-02-07 18:24:41 +01:00
rustc_trait_selection Rollup merge of #120513 - compiler-errors:normalize-regions-for-nll, r=lcnr 2024-02-06 22:45:43 +01:00
rustc_traits Remove unused features 2024-01-25 14:01:33 +00:00
rustc_transmute Remove unused features 2024-01-25 14:01:33 +00:00
rustc_ty_utils Fudge coroutine argument for CoroutineKindShim in fn_sig_for_fn_abi 2024-02-06 02:53:06 +00:00
rustc_type_ir Bless tests, add comments 2024-02-06 02:22:58 +00:00
stable_mir Remove the abi_amdgpu_kernel feature 2024-01-30 15:46:40 +00:00