rust/compiler/rustc_passes/src
Nicholas Nethercote 260ae70140 Overhaul how stashed diagnostics work, again.
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.
2024-02-29 11:08:27 +11:00
..
liveness Match unmatched backticks in compiler/ that are part of rustdoc 2023-03-03 08:39:00 +01:00
abi_test.rs Remove Session methods that duplicate DiagCtxt methods. 2023-12-24 08:05:28 +11:00
check_attr.rs Overhaul how stashed diagnostics work, again. 2024-02-29 11:08:27 +11:00
check_const.rs Reduce capabilities of Diagnostic. 2024-02-20 13:22:17 +11:00
dead.rs Overhaul the handling of errors at the top-level. 2024-02-22 08:03:47 +11:00
debugger_visualizer.rs Add check for ui_testing via promoting parameters from ParseSess to Session 2024-01-13 12:11:13 -05:00
diagnostic_items.rs Remove Session methods that duplicate DiagCtxt methods. 2023-12-24 08:05:28 +11:00
entry.rs Stop using String for error codes. 2024-01-29 07:41:41 +11:00
errors.rs Rename DiagnosticSymbolList as DiagSymbolList. 2024-02-28 08:55:37 +11:00
hir_id_validator.rs Add DiagCtxt::delayed_bug. 2024-01-10 07:33:07 +11:00
hir_stats.rs Add ast::ExprKind::Dummy 2024-02-25 22:22:09 +01:00
lang_items.rs resolve: Scale back unloading of speculatively loaded crates 2024-02-18 20:59:19 +03:00
layout_test.rs Remove Session methods that duplicate DiagCtxt methods. 2023-12-24 08:05:28 +11:00
lib_features.rs Remove Session methods that duplicate DiagCtxt methods. 2023-12-24 08:05:28 +11:00
lib.rs Use generic NonZero internally. 2024-02-15 08:09:42 +01:00
liveness.rs Fix liveness analysis in the presence of never patterns 2024-02-21 12:04:39 +01:00
loops.rs hir: Remove fn opt_hir_id and fn opt_span 2024-02-07 09:38:24 +03:00
naked_functions.rs Rename TyCtxt::emit_spanned_lint as TyCtxt::emit_node_span_lint. 2024-01-23 08:09:05 +11:00
reachable.rs Move some methods from tcx.hir() to tcx 2023-12-12 06:40:29 -08:00
stability.rs remove platform-intrinsics ABI; make SIMD intrinsics be regular intrinsics 2024-02-25 08:14:52 +01:00
upvars.rs is_closure_like 2024-02-11 22:09:52 +00:00
weak_lang_items.rs Stop mentioning internal lang items in no_std binary errors 2024-01-10 21:18:54 +01:00