rust/tests/ui/impl-trait
Nicholas Nethercote 72b172bdf6 Overhaul the handling of errors at the top-level.
Currently `emit_stashed_diagnostic` is called from four(!) different
places: `print_error_count`, `DiagCtxtInner::drop`, `abort_if_errors`,
and `compile_status`.

And `flush_delayed` is called from two different places:
`DiagCtxtInner::drop` and `Queries`.

This is pretty gross! Each one should really be called from a single
place, but there's a bunch of entanglements. This commit cleans up this
mess.

Specifically, it:
- Removes all the existing calls to `emit_stashed_diagnostic`, and adds
  a single new call in `finish_diagnostics`.
- Removes the early `flush_delayed` call in `codegen_and_build_linker`,
  replacing it with a simple early return if delayed bugs are present.
- Changes `DiagCtxtInner::drop` and `DiagCtxtInner::flush_delayed` so
  they both assert that the stashed diagnostics are empty (i.e.
  processed beforehand).
- Changes `interface::run_compiler` so that any errors emitted during
  `finish_diagnostics` (i.e. late-emitted stashed diagnostics) are
  counted and cannot be overlooked. This requires adding
  `ErrorGuaranteed` return values to several functions.
- Removes the `stashed_err_count` call in `analysis`. This is possible
  now that we don't have to worry about calling `flush_delayed` early
  from `codegen_and_build_linker` when stashed diagnostics are pending.
- Changes the `span_bug` case in `handle_tuple_field_pattern_match` to a
  `delayed_span_bug`, because it now can be reached due to the removal
  of the `stashed_err_count` call in `analysis`.
- Slightly changes the expected output of three tests. If no errors are
  emitted but there are delayed bugs, the error count is no longer
  printed. This is because delayed bugs are now always printed after the
  error count is printed (or not printed, if the error count is zero).

There is a lot going on in this commit. It's hard to break into smaller
pieces because the existing code is very tangled. It took me a long time
and a lot of effort to understand how the different pieces interact, and
I think the new code is a lot simpler and easier to understand.
2024-02-22 08:03:47 +11:00
..
alias-liveness
auxiliary
diagnostics
explicit-generic-args-with-impl-trait
in-ctfe
in-trait
issues
multiple-lifetimes
rpit
transmute
arg-position-impl-trait-too-long.rs
arg-position-impl-trait-too-long.stderr
associated-impl-trait-type-generic-trait.rs
associated-impl-trait-type-issue-114325.rs
associated-impl-trait-type-trivial.rs
associated-impl-trait-type.rs
async_scope_creep.rs
auto-trait-coherence.next.stderr
auto-trait-coherence.old.stderr
auto-trait-coherence.rs
auto-trait-leak-rpass.rs
auto-trait-leak.rs
auto-trait-leak.stderr
auto-trait-leak2.rs
auto-trait-leak2.stderr
autoderef.rs
bivariant-lifetime-liveness.rs
bound-normalization-fail.rs
bound-normalization-fail.stderr
bound-normalization-pass.rs
bounds_regression.rs
can-return-unconstrained-closure.rs
capture-lifetime-not-in-hir.rs
capture-lifetime-not-in-hir.stderr
closure-calling-parent-fn.rs
closure-in-impl-trait-arg.rs
closure-in-impl-trait.rs
coherence-treats-tait-ambig.current.stderr
coherence-treats-tait-ambig.rs
coherence-treats-tait-ambig.stderr
cross-return-site-inference.rs
cross-return-site-inference.stderr
deduce-signature-from-supertrait.rs
defined-by-trait-resolution.rs
deprecated_annotation.rs
divergence.rs
does-not-live-long-enough.rs
does-not-live-long-enough.stderr
dont-suggest-box-on-empty-else-arm.rs
dont-suggest-box-on-empty-else-arm.stderr
dyn-impl-type-mismatch.rs
dyn-impl-type-mismatch.stderr
dyn-trait-elided-two-inputs-assoc.rs
dyn-trait-elided-two-inputs-param.rs
dyn-trait-elided-two-inputs-ref-assoc.rs
dyn-trait-elided-two-inputs-ref-param.rs
dyn-trait-return-should-be-impl-trait.rs
dyn-trait-return-should-be-impl-trait.stderr
eagerly-reveal-in-local-body.rs
equal-hidden-lifetimes.rs
equality-in-canonical-query.clone.stderr Overhaul the handling of errors at the top-level. 2024-02-22 08:03:47 +11:00
equality-in-canonical-query.rs
equality-rpass.rs
equality-rpass.stderr
equality.rs
equality.stderr
equality2.rs
equality2.stderr
erased-regions-in-hidden-ty.current.stderr
erased-regions-in-hidden-ty.next.stderr
erased-regions-in-hidden-ty.rs
example-calendar.rs
example-st.rs
example-st.stderr
extra-impl-in-trait-impl.fixed
extra-impl-in-trait-impl.rs
extra-impl-in-trait-impl.stderr
extra-item.rs
extra-item.stderr
fallback.rs
fallback_inference.rs
fallback_inference.stderr
feature-self-return-type.rs
feature-self-return-type.stderr
fresh-lifetime-from-bare-trait-obj-114664.rs
fresh-lifetime-from-bare-trait-obj-114664.stderr
generic-with-implicit-hrtb-without-dyn.edition2015.stderr
generic-with-implicit-hrtb-without-dyn.edition2021.stderr
generic-with-implicit-hrtb-without-dyn.rs
hidden-lifetimes.rs
hidden-lifetimes.stderr
hidden-type-is-opaque-2.rs
hidden-type-is-opaque-2.stderr
hidden-type-is-opaque.rs
impl-fn-hrtb-bounds-2.rs
impl-fn-hrtb-bounds-2.stderr
impl-fn-hrtb-bounds.rs
impl-fn-hrtb-bounds.stderr
impl-fn-parsing-ambiguities.rs
impl-fn-parsing-ambiguities.stderr
impl-fn-predefined-lifetimes.rs
impl-fn-predefined-lifetimes.stderr
impl-generic-mismatch-ab.rs
impl-generic-mismatch-ab.stderr
impl-generic-mismatch.rs
impl-generic-mismatch.stderr
impl-subtyper.rs
impl-subtyper2.rs
impl-trait-in-macro.rs
impl-trait-in-macro.stderr
impl-trait-plus-priority.rs
impl-trait-plus-priority.stderr
impl_fn_associativity.rs
impl_trait_projections.rs
impl_trait_projections.stderr
implicit-capture-late.rs
implicit-capture-late.stderr
in-assoc-type-unconstrained.rs
in-assoc-type-unconstrained.stderr
in-assoc-type.rs
in-assoc-type.stderr
issue-35668.rs
issue-35668.stderr
issue-36792.rs
issue-46959.rs
issue-49556.rs
issue-49579.rs
issue-49685.rs
issue-51185.rs
issue-54966.rs
issue-54966.stderr
issue-55872-1.rs
issue-55872-1.stderr
issue-55872-2.rs
issue-55872-2.stderr
issue-55872-3.rs
issue-55872-3.stderr
issue-55872.rs
issue-55872.stderr
issue-56445.rs
issue-68532.rs
issue-72911.rs
issue-72911.stderr
issue-86465.rs
issue-86465.stderr
issue-87450.rs
issue-87450.stderr
issue-99073-2.rs
issue-99073-2.stderr
issue-99073.rs
issue-99073.stderr
issue-99642-2.rs
issue-99642.rs
issue-99914.rs
issue-99914.stderr
issue-100075-2.rs
issue-100075-2.stderr
issue-100075.rs
issue-100075.stderr
issue-100187.rs
issue-102605.rs
issue-102605.stderr
issue-103181-1.current.stderr
issue-103181-1.next.stderr
issue-103181-1.rs
issue-103181-2.rs
issue-103181-2.stderr
issue-103599.rs
issue-103599.stderr
issue-108591.rs
issue-108592.rs
lifetime-ambiguity-regression.rs
lifetimes.rs
lifetimes2.rs
mapping-duplicated-lifetimes-issue-114597.rs
method-suggestion-no-duplication.rs
method-suggestion-no-duplication.stderr
multiple-defining-usages-in-body.rs
multiple-defining-usages-in-body.stderr
must_outlive_least_region_or_bound.rs
must_outlive_least_region_or_bound.stderr
needs_least_region_or_bound.rs
negative-reasoning.rs
negative-reasoning.stderr
nested-return-type.rs
nested-return-type2-tait.rs
nested-return-type2-tait.stderr
nested-return-type2-tait2.rs
nested-return-type2-tait2.stderr
nested-return-type2-tait3.rs
nested-return-type2-tait3.stderr
nested-return-type2.rs
nested-return-type3-tait.rs
nested-return-type3-tait.stderr
nested-return-type3-tait2.rs
nested-return-type3-tait2.stderr
nested-return-type3-tait3.rs
nested-return-type3-tait3.stderr
nested-return-type3.rs
nested-return-type4.rs
nested-return-type4.stderr
nested-rpit-hrtb-2.rs
nested-rpit-hrtb-2.stderr
nested-rpit-hrtb.rs
nested-rpit-hrtb.stderr
nested-rpit-with-anonymous-lifetimes.rs
nested_impl_trait.rs
nested_impl_trait.stderr
nesting.rs
no-method-suggested-traits.rs
no-method-suggested-traits.stderr
no-trait.rs
no-trait.stderr
normalize-opaque-with-bound-vars.rs
normalize-tait-in-const.rs
normalize-tait-in-const.stderr
not_general_enough_regression_106630.rs
object-unsafe-trait-in-return-position-dyn-trait.rs
object-unsafe-trait-in-return-position-dyn-trait.stderr
object-unsafe-trait-in-return-position-impl-trait.rs
object-unsafe-trait-in-return-position-impl-trait.stderr
opaque-cast-field-access-in-future.rs
opaque-cast-field-access-in-future.stderr
opaque-used-in-extraneous-argument.rs
opaque-used-in-extraneous-argument.stderr
point-to-type-err-cause-on-impl-trait-return.rs
point-to-type-err-cause-on-impl-trait-return.stderr
printing-binder.rs
printing-binder.stderr
private_unused.rs
projection-mismatch-in-impl-where-clause.rs
projection-mismatch-in-impl-where-clause.stderr
projection.rs
question_mark.rs
recursive-auto-trait.rs
recursive-coroutine-boxed.next.stderr
recursive-coroutine-boxed.rs
recursive-coroutine-indirect.current.stderr
recursive-coroutine-indirect.next.stderr
recursive-coroutine-indirect.rs
recursive-impl-trait-type-direct.rs
recursive-impl-trait-type-indirect.rs
recursive-impl-trait-type-indirect.stderr
recursive-impl-trait-type-through-non-recursive.rs
recursive-impl-trait-type-through-non-recursive.stderr
recursive-type-alias-impl-trait-declaration-too-subtle-2.rs
recursive-type-alias-impl-trait-declaration-too-subtle.rs
recursive-type-alias-impl-trait-declaration-too-subtle.stderr
recursive-type-alias-impl-trait-declaration.rs
recursive-type-alias-impl-trait-declaration.stderr
region-escape-via-bound-contravariant-closure.rs
region-escape-via-bound-contravariant.rs
region-escape-via-bound.rs
region-escape-via-bound.stderr
return-position-impl-trait-minimal.rs
reveal-during-codegen.rs
rpit-assoc-pair-with-lifetime.rs
rpit-not-sized.rs
rpit-not-sized.stderr
static-lifetime-return-position-impl-trait.rs
static-return-lifetime-infered.rs
static-return-lifetime-infered.stderr
suggest-calling-rpit-closure.rs
suggest-calling-rpit-closure.stderr
trait_resolution.rs
trait_type.rs
trait_type.stderr
two_tait_defining_each_other.current.stderr
two_tait_defining_each_other.rs
two_tait_defining_each_other2.current.stderr
two_tait_defining_each_other2.next.stderr
two_tait_defining_each_other2.rs
two_tait_defining_each_other3.current.stderr
two_tait_defining_each_other3.rs
type-alias-generic-param.rs
type-alias-generic-param.stderr
type-alias-impl-trait-in-fn-body.rs
type-arg-mismatch-due-to-impl-trait.rs
type-arg-mismatch-due-to-impl-trait.stderr
type_parameters_captured.rs
type_parameters_captured.stderr
unactionable_diagnostic.fixed
unactionable_diagnostic.rs
unactionable_diagnostic.stderr
universal-mismatched-type.rs
universal-mismatched-type.stderr
universal-two-impl-traits.rs
universal-two-impl-traits.stderr
universal_hrtb_anon.rs
universal_hrtb_named.rs
universal_in_adt_in_parameters.rs
universal_in_impl_trait_in_parameters.rs
universal_in_trait_defn_parameters.rs
universal_multiple_bounds.rs
universal_wrong_bounds.rs
universal_wrong_bounds.stderr
universal_wrong_hrtb.rs
universal_wrong_hrtb.stderr
unsafety-checking-cycle.rs
variance.e2024.stderr
variance.new.stderr
variance.old.stderr
variance.rs
wf-eval-order.rs
where-allowed-2.rs
where-allowed-2.stderr
where-allowed.rs
where-allowed.stderr
xcrate.rs
xcrate_simple.rs