rust/tests/ui/generic-associated-types
bors 47dd709bed Auto merge of #121123 - compiler-errors:item-assumptions, r=oli-obk
Split an item bounds and an item's super predicates

This is the moral equivalent of #107614, but instead for predicates this applies to **item bounds**. This PR splits out the item bounds (i.e. *all* predicates that are assumed to hold for the alias) from the item *super predicates*, which are the subset of item bounds which share the same self type as the alias.

## Why?

Much like #107614, there are places in the compiler where we *only* care about super-predicates, and considering predicates that possibly don't have anything to do with the alias is problematic. This includes things like closure signature inference (which is at its core searching for `Self: Fn(..)` style bounds), but also lints like `#[must_use]`, error reporting for aliases, computing type outlives predicates.

Even in cases where considering all of the `item_bounds` doesn't lead to bugs, unnecessarily considering irrelevant bounds does lead to a regression (#121121) due to doing extra work in the solver.

## Example 1 - Trait Aliases

This is best explored via an example:

```
type TAIT<T> = impl TraitAlias<T>;

trait TraitAlias<T> = A + B where T: C;
```

The item bounds list for `Tait<T>` will include:
* `Tait<T>: A`
* `Tait<T>: B`
* `T: C`

While `item_super_predicates` query will include just the first two predicates.

Side-note: You may wonder why `T: C` is included in the item bounds for `TAIT`? This is because when we elaborate `TraitAlias<T>`, we will also elaborate all the predicates on the trait.

## Example 2 - Associated Type Bounds

```
type TAIT<T> = impl Iterator<Item: A>;
```

The `item_bounds` list for `TAIT<T>` will include:
* `Tait<T>: Iterator`
* `<Tait<T> as Iterator>::Item: A`

But the `item_super_predicates` will just include the first bound, since that's the only bound that is relevant to the *alias* itself.

## So what

This leads to some diagnostics duplication just like #107614, but none of it will be user-facing. We only see it in the UI test suite because we explicitly disable diagnostic deduplication.

Regarding naming, I went with `super_predicates` kind of arbitrarily; this can easily be changed, but I'd consider better names as long as we don't block this PR in perpetuity.
2024-03-21 06:12:24 +00:00
..
auxiliary
bugs eagerly instantiate binders to avoid relying on sub 2024-03-14 17:19:40 +01:00
extended
parse
ambig-hr-projection-issue-93340.next.stderr rebase 2024-03-14 17:19:40 +01:00
ambig-hr-projection-issue-93340.old.stderr one must imagine tidy happy 2024-03-14 17:19:40 +01:00
ambig-hr-projection-issue-93340.rs one must imagine tidy happy 2024-03-14 17:19:40 +01:00
anonymize-bound-vars.rs
assume-gat-normalization-for-nested-goals.current.stderr Mark some next-solver-behavior tests explicitly with revisions 2024-03-10 23:23:46 -04:00
assume-gat-normalization-for-nested-goals.rs Mark some next-solver-behavior tests explicitly with revisions 2024-03-10 23:23:46 -04:00
collections-project-default.rs
collections-project-default.stderr
collections.rs
collectivity-regression.rs
collectivity-regression.stderr
const_params_have_right_type.rs
const_params_have_right_type.stderr
const-generics-gat-in-trait-return-type-1.rs
const-generics-gat-in-trait-return-type-2.rs
const-generics-gat-in-trait-return-type-3.rs
constraint-assoc-type-suggestion.rs
constraint-assoc-type-suggestion.stderr
construct_with_other_type.rs
cross-crate-bounds.rs
cross-crate-bounds.stderr
elided-in-expr-position.rs
elided-in-expr-position.stderr Merge collect_mod_item_types query into check_well_formed 2024-03-07 14:26:31 +00:00
empty_generics.rs
empty_generics.stderr
equality-bound.rs
equality-bound.stderr
gat-bounds-normalize-pred.rs
gat-bounds-not-checked-with-right-substitutions.rs
gat-bounds-not-checked-with-right-substitutions.stderr
gat-in-trait-path-undeclared-lifetime.rs
gat-in-trait-path-undeclared-lifetime.stderr
gat-in-trait-path.base.stderr
gat-in-trait-path.rs
gat-trait-path-generic-type-arg.rs
gat-trait-path-generic-type-arg.stderr
gat-trait-path-missing-lifetime.rs
gat-trait-path-missing-lifetime.stderr Merge collect_mod_item_types query into check_well_formed 2024-03-07 14:26:31 +00:00
gat-trait-path-parenthesised-args.rs
gat-trait-path-parenthesised-args.stderr Merge collect_mod_item_types query into check_well_formed 2024-03-07 14:26:31 +00:00
generic_associated_type_undeclared_lifetimes.rs
generic_associated_type_undeclared_lifetimes.stderr
generic-associated-type-bounds.rs
generic-associated-types-where.rs
generic-associated-types-where.stderr
higher-ranked-self-impl-requirement.rs
impl_bounds_ok.rs
impl_bounds.rs
impl_bounds.stderr
issue-47206-where-clause.rs
issue-47206-where-clause.stderr
issue-58694-parameter-out-of-range.rs
issue-62326-parameter-out-of-range.rs
issue-67424.rs
issue-67510-pass.base.stderr
issue-67510-pass.rs
issue-67510.rs
issue-67510.stderr
issue-68641-check-gat-bounds.rs
issue-68641-check-gat-bounds.stderr
issue-68642-broken-llvm-ir.rs
issue-68642-broken-llvm-ir.stderr
issue-68643-broken-mir.rs
issue-68643-broken-mir.stderr
issue-68644-codegen-selection.rs
issue-68644-codegen-selection.stderr
issue-68645-codegen-fulfillment.rs
issue-68645-codegen-fulfillment.stderr
issue-68648-1.rs
issue-68648-2.rs
issue-68648-2.stderr
issue-68649-pass.rs
issue-68653.rs
issue-68656-unsized-values.rs
issue-68656-unsized-values.stderr
issue-70303.rs
issue-70304.rs
issue-70304.stderr
issue-71176.rs
issue-71176.stderr
issue-74684-1.rs
issue-74684-1.stderr
issue-74684-2.rs
issue-74684-2.stderr Revert "Auto merge of #122140 - oli-obk:track_errors13, r=davidtwco" 2024-03-11 21:28:16 +00:00
issue-74816.rs
issue-74816.stderr
issue-74824.rs
issue-74824.stderr
issue-76407.rs
issue-76535.base.stderr
issue-76535.extended.stderr
issue-76535.rs
issue-76826.rs
issue-78113-lifetime-mismatch-dyn-trait-box.rs
issue-78113-lifetime-mismatch-dyn-trait-box.stderr
issue-78671.base.stderr
issue-78671.extended.stderr
issue-78671.rs
issue-79422.base.stderr
issue-79422.extended.stderr
issue-79422.rs
issue-79636-1.rs
issue-79636-1.stderr
issue-79636-2.rs
issue-79636-2.stderr
issue-80433-reduced.rs
issue-80433.rs make type_flags(ReError) & HAS_ERROR 2024-03-20 17:29:58 +00:00
issue-80433.stderr make type_flags(ReError) & HAS_ERROR 2024-03-20 17:29:58 +00:00
issue-81487.rs
issue-81712-cyclic-traits.rs Bless test fallout (duplicate diagnostics) 2024-03-20 13:00:34 -04:00
issue-81712-cyclic-traits.stderr Bless test fallout (duplicate diagnostics) 2024-03-20 13:00:34 -04:00
issue-81862.rs
issue-81862.stderr
issue-84931.rs
issue-84931.stderr
issue-85921.rs
issue-86218-2.rs
issue-86218.rs
issue-86483.rs
issue-86787.rs
issue-86787.stderr
issue-87258_a.rs
issue-87258_a.stderr
issue-87258_b.rs
issue-87258_b.stderr
issue-87429-2.rs
issue-87429-associated-type-default.rs
issue-87429-associated-type-default.stderr
issue-87429-specialization.rs
issue-87429-specialization.stderr
issue-87429.rs
issue-87748.rs
issue-87750.rs
issue-88287.rs
issue-88287.stderr
issue-88360.fixed
issue-88360.rs
issue-88360.stderr
issue-88405.rs
issue-88459.rs
issue-88595.rs Make DefiningAnchor::Bind only store the opaque types that may be constrained, instead of the current infcx root item. 2024-03-11 17:19:37 +00:00
issue-88595.stderr Make DefiningAnchor::Bind only store the opaque types that may be constrained, instead of the current infcx root item. 2024-03-11 17:19:37 +00:00
issue-89008.rs
issue-89352.rs
issue-90014-tait2.next-solver.stderr Mark some next-solver-behavior tests explicitly with revisions 2024-03-10 23:23:46 -04:00
issue-90014-tait2.rs Remove some unnecessary allow(incomplete_features) 2024-03-11 19:42:04 +00:00
issue-90014-tait2.stderr Remove some unnecessary allow(incomplete_features) 2024-03-11 19:42:04 +00:00
issue-90014-tait.rs
issue-90014-tait.stderr
issue-90014.rs
issue-90014.stderr
issue-90729.rs
issue-91139.migrate.stderr
issue-91139.rs
issue-91139.stderr
issue-91883.rs
issue-91883.stderr
issue-92033.rs
issue-92033.stderr
issue-92096.migrate.stderr
issue-92096.rs
issue-92096.stderr
issue-92280.rs
issue-92954.rs
issue-93141.rs
issue-93262.rs
issue-93341.rs
issue-93342.rs
issue-93874.rs
issue-95305.rs
issue-95305.stderr
issue-101020.rs
issue-101020.stderr
issue-102114.current.stderr Ignore tests w/ current/next revisions from compare-mode=next-solver 2024-03-10 21:18:41 -04:00
issue-102114.next.stderr Ignore tests w/ current/next revisions from compare-mode=next-solver 2024-03-10 21:18:41 -04:00
issue-102114.rs Ignore tests w/ current/next revisions from compare-mode=next-solver 2024-03-10 21:18:41 -04:00
issue-102333.rs
issue-102335-gat.rs Bless test fallout (duplicate diagnostics) 2024-03-20 13:00:34 -04:00
issue-102335-gat.stderr Bless test fallout (duplicate diagnostics) 2024-03-20 13:00:34 -04:00
issue-119942-unsatisified-gat-bound-during-assoc-ty-selection.rs clean up ADT sized constraint computation 2024-03-14 21:28:47 +01:00
issue-119942-unsatisified-gat-bound-during-assoc-ty-selection.stderr clean up ADT sized constraint computation 2024-03-14 21:28:47 +01:00
iterable.rs
method-unsatisfied-assoc-type-predicate.rs
method-unsatisfied-assoc-type-predicate.stderr
mismatched-where-clause-regions.rs
mismatched-where-clause-regions.stderr
missing_lifetime_args.rs
missing_lifetime_args.stderr Merge collect_mod_item_types query into check_well_formed 2024-03-07 14:26:31 +00:00
missing_lifetime_const.rs
missing_lifetime_const.stderr
missing-bounds.fixed
missing-bounds.rs
missing-bounds.stderr
missing-item-sugg.rs
missing-item-sugg.stderr
missing-where-clause-on-trait.rs
missing-where-clause-on-trait.stderr
multiple-type-params-with-unmet-bounds.rs
multiple-type-params-with-unmet-bounds.stderr
own-bound-span.rs
own-bound-span.stderr
parameter_number_and_kind_impl.rs
parameter_number_and_kind_impl.stderr
parameter_number_and_kind.rs
parameter_number_and_kind.stderr
pointer_family.rs
projection-bound-cycle-generic.rs
projection-bound-cycle-generic.stderr
projection-bound-cycle.rs
projection-bound-cycle.stderr
projection-type-lifetime-mismatch.rs
projection-type-lifetime-mismatch.stderr
rigid-hr-projection-issue-93340.rs one must imagine tidy happy 2024-03-14 17:19:40 +01:00
self-outlives-lint.rs
self-outlives-lint.stderr
shadowing.rs
shadowing.stderr
streaming_iterator.rs
trait-objects.base.stderr
trait-objects.extended.stderr
trait-objects.rs
type-param-defaults.rs
type-param-defaults.stderr
unknown-lifetime-ice-119827.rs Merge collect_mod_item_types query into check_well_formed 2024-03-07 14:26:31 +00:00
unknown-lifetime-ice-119827.stderr Merge collect_mod_item_types query into check_well_formed 2024-03-07 14:26:31 +00:00
unsatisfied-item-lifetime-bound.rs
unsatisfied-item-lifetime-bound.stderr
unsatisfied-outlives-bound.rs
unsatisfied-outlives-bound.stderr
variance_constraints.rs