rust/tests/ui/impl-trait
bors 2f5df8a94b Auto merge of #115366 - compiler-errors:associated-type-bound-implicit-lifetimes, r=jackh726
Capture lifetimes for associated type bounds destined to be lowered to opaques

Some associated type bounds get lowered to opaques, but they're not represented in the AST as opaques.

That means that we never collect lifetimes for them (`record_lifetime_params_for_impl_trait`) which are used currently for RPITITs, which capture all of their in-scope lifetimes[^1]. This means that the nested RPITITs that arise from some type like `impl Foo<Type: Bar>` (~> `impl Foo<Type = impl Bar>`) don't capture any lifetimes, leading to ICEs.

This PR makes sure we collect the lifetimes for associated type bounds as well, and make sure that they are set up correctly for opaque type lowering later.

Fixes #115360

[^1]: #114489
2023-08-31 21:13:54 +00:00
..
auxiliary
diagnostics
explicit-generic-args-with-impl-trait diagnostics: remove inconsistent English article "this" from E0107 2023-02-23 10:27:06 -07:00
in-trait Capture lifetimes for associated type bounds destined to be lowered to opaques 2023-08-30 00:31:00 +00:00
issues More precisely detect cycle errors from type_of on opaque 2023-08-27 22:03:16 +00:00
multiple-lifetimes Rename tests to ensure they don't have overlapping names. 2023-03-22 21:12:40 -07:00
rpit check for non-defining uses of RPIT 2023-08-14 15:25:20 +02:00
arg-position-impl-trait-too-long.rs Don't print newlines in APITs 2023-05-25 02:45:14 +00:00
arg-position-impl-trait-too-long.stderr Don't print newlines in APITs 2023-05-25 02:45:14 +00:00
associated-impl-trait-type-generic-trait.rs Split out a separate feature gate for impl trait in associated types 2023-04-12 16:17:31 +00:00
associated-impl-trait-type-trivial.rs Split out a separate feature gate for impl trait in associated types 2023-04-12 16:17:31 +00:00
associated-impl-trait-type.rs Split out a separate feature gate for impl trait in associated types 2023-04-12 16:17:31 +00:00
async_scope_creep.rs
auto-trait-leak2.rs Revert "Suggest using Arc on !Send/!Sync types" 2023-08-28 03:16:48 -07:00
auto-trait-leak2.stderr Revert "Suggest using Arc on !Send/!Sync types" 2023-08-28 03:16:48 -07:00
auto-trait-leak-rpass.rs
auto-trait-leak.rs More precisely detect cycle errors from type_of on opaque 2023-08-27 22:03:16 +00:00
auto-trait-leak.stderr More precisely detect cycle errors from type_of on opaque 2023-08-27 22:03:16 +00:00
auto-trait.rs
auto-trait.stderr
autoderef.rs Consider a goal as NOT changed if its response is identity modulo regions 2023-07-27 04:00:49 +00:00
bound-normalization-fail.rs
bound-normalization-fail.stderr Hide more of long types in E0271 2023-01-11 21:40:39 +00:00
bound-normalization-pass.rs Remove save-analysis. 2023-02-16 15:14:45 +11:00
bounds_regression.rs
can-return-unconstrained-closure.rs
closure-calling-parent-fn.rs
closure-in-impl-trait-arg.rs
closure-in-impl-trait.rs
coherence-treats-tait-ambig.current.stderr Treat TAIT equation as always ambiguous in coherence 2023-06-18 22:52:30 +00:00
coherence-treats-tait-ambig.next.stderr Treat TAIT equation as always ambiguous in coherence 2023-06-18 22:52:30 +00:00
coherence-treats-tait-ambig.rs Treat TAIT equation as always ambiguous in coherence 2023-06-18 22:52:30 +00:00
cross-return-site-inference.rs
cross-return-site-inference.stderr
deduce-signature-from-supertrait.rs Require TAITs to be mentioned in the signatures of functions that register hidden types for them 2023-07-07 13:13:18 +00:00
defined-by-trait-resolution.rs allow opaques to be defined by trait queries 2023-07-14 12:35:33 +00:00
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 Don't suggest boxing an empty if/else arm 2023-06-11 00:19:56 +00:00
dont-suggest-box-on-empty-else-arm.stderr Don't suggest boxing an empty if/else arm 2023-06-11 00:19:56 +00:00
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 Remove return type sized check hack from hir typeck 2023-05-18 01:53:01 +00:00
dyn-trait-return-should-be-impl-trait.stderr Remove return type sized check hack from hir typeck 2023-05-18 01:53:01 +00:00
equal-hidden-lifetimes.rs Convert a hard-warning about named static lifetimes into lint "unused_lifetimes" 2023-02-22 09:44:26 +08:00
equality2.rs
equality2.stderr Mention fn coercion rules (needs to be expanded) 2023-01-30 21:51:33 +00:00
equality-rpass.rs
equality-rpass.stderr
equality.rs
equality.stderr Don't sort strings right after we just sorted by types 2023-06-27 23:31:06 +00:00
example-calendar.rs
example-st.rs
extra-impl-in-trait-impl.fixed improve error for impl<..> impl Trait for Type 2023-05-13 10:51:21 +02:00
extra-impl-in-trait-impl.rs improve error for impl<..> impl Trait for Type 2023-05-13 10:51:21 +02:00
extra-impl-in-trait-impl.stderr improve error for impl<..> impl Trait for Type 2023-05-13 10:51:21 +02:00
extra-item.rs
extra-item.stderr
fallback_inference.rs
fallback_inference.stderr
fallback.rs
feature-self-return-type.rs
feature-self-return-type.stderr Tweak E0597 2023-01-15 19:46:20 +00:00
fresh-lifetime-from-bare-trait-obj-114664.rs Record binder for bare trait object in LifetimeCollectVisitor 2023-08-11 03:15:41 +00:00
fresh-lifetime-from-bare-trait-obj-114664.stderr Record binder for bare trait object in LifetimeCollectVisitor 2023-08-11 03:15:41 +00:00
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 Label opaque type for 'captures lifetime' error message 2023-03-03 05:02:34 +00:00
hidden-type-is-opaque-2.rs Fix invalid suggestion for mismatched types in closure arguments 2023-07-30 17:15:55 +02:00
hidden-type-is-opaque-2.stderr Fix invalid suggestion for mismatched types in closure arguments 2023-07-30 17:15:55 +02:00
hidden-type-is-opaque.rs
impl_fn_associativity.rs
impl_trait_projections.rs When suggesting writing a fully qualified path probe for appropriate types 2023-01-11 21:30:10 +00:00
impl_trait_projections.stderr When suggesting writing a fully qualified path probe for appropriate types 2023-01-11 21:30:10 +00:00
impl-fn-hrtb-bounds-2.rs
impl-fn-hrtb-bounds-2.stderr Remove index from BrAnon 2023-04-06 23:01:40 -04:00
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-trait-in-macro.rs
impl-trait-in-macro.stderr
impl-trait-plus-priority.rs
impl-trait-plus-priority.stderr
in-assoc-type-unconstrained.rs Use the opaque_types_defined_by query to cheaply check for whether a hidden type may be registered for an opaque type 2023-05-12 10:26:50 +00:00
in-assoc-type-unconstrained.stderr Point to argument/return type instead of the whole function header 2023-06-22 15:00:12 +00:00
in-assoc-type.rs Require TAITs to be mentioned in the signatures of functions that register hidden types for them 2023-07-07 13:13:18 +00:00
in-assoc-type.stderr Require TAITs to be mentioned in the signatures of functions that register hidden types for them 2023-07-07 13:13:18 +00:00
issue-35668.rs
issue-35668.stderr
issue-36792.rs Move test files 2023-04-20 15:06:17 -03:00
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 Split out a separate feature gate for impl trait in associated types 2023-04-12 16:17:31 +00:00
issue-55872-1.stderr
issue-55872-2.drop_tracking_mir.stderr Bless tests. 2023-01-27 20:10:17 +00:00
issue-55872-2.drop_tracking.stderr Test the 3 generator handling versions for generator/async tests. 2023-01-27 18:58:13 +00:00
issue-55872-2.no_drop_tracking.stderr Test the 3 generator handling versions for generator/async tests. 2023-01-27 18:58:13 +00:00
issue-55872-2.rs Split out a separate feature gate for impl trait in associated types 2023-04-12 16:17:31 +00:00
issue-55872-3.rs Remove compare mode 2023-07-03 21:40:04 +00:00
issue-55872-3.stderr Remove chalk from the compiler 2023-07-03 21:40:04 +00:00
issue-55872.rs Split out a separate feature gate for impl trait in associated types 2023-04-12 16:17:31 +00:00
issue-55872.stderr
issue-56445.rs
issue-68532.rs
issue-72911.rs
issue-72911.stderr
issue-86465.rs Revert "Auto merge of #102417 - oli-obk:opaque_lifetimes2, r=jackh726" 2023-08-30 11:06:46 +00:00
issue-86465.stderr Revert "Auto merge of #102417 - oli-obk:opaque_lifetimes2, r=jackh726" 2023-08-30 11:06:46 +00:00
issue-87450.rs
issue-87450.stderr
issue-99073-2.rs check for non-defining uses of RPIT 2023-08-14 15:25:20 +02:00
issue-99073-2.stderr check for non-defining uses of RPIT 2023-08-14 15:25:20 +02:00
issue-99073.rs check for non-defining uses of RPIT 2023-08-14 15:25:20 +02:00
issue-99073.stderr check for non-defining uses of RPIT 2023-08-14 15:25:20 +02:00
issue-99642-2.rs
issue-99642.rs
issue-99914.rs
issue-99914.stderr fix: improve the suggestion on future not awaited 2023-02-13 16:23:23 +01:00
issue-100075-2.rs
issue-100075-2.stderr
issue-100075.rs
issue-100075.stderr
issue-100187.rs
issue-102605.rs
issue-102605.stderr Check entry type as part of item type checking. 2023-07-15 22:02:16 +00:00
issue-103181-1.current.stderr Use error term if missing associated item in new solver 2023-05-16 16:02:17 +00:00
issue-103181-1.next.stderr Use error term if missing associated item in new solver 2023-05-16 16:02:17 +00:00
issue-103181-1.rs Use error term if missing associated item in new solver 2023-05-16 16:02:17 +00:00
issue-103181-2.rs More precisely detect cycle errors from type_of on opaque 2023-08-27 22:03:16 +00:00
issue-103181-2.stderr More precisely detect cycle errors from type_of on opaque 2023-08-27 22:03:16 +00:00
issue-103599.rs
issue-103599.stderr
issue-108591.rs Revert "Auto merge of #102417 - oli-obk:opaque_lifetimes2, r=jackh726" 2023-08-30 11:06:46 +00:00
issue-108592.rs Revert "Auto merge of #102417 - oli-obk:opaque_lifetimes2, r=jackh726" 2023-08-30 11:06:46 +00:00
lifetimes2.rs
lifetimes.rs
mapping-duplicated-lifetimes-issue-114597.rs add'l test 2023-08-08 09:39:59 +00:00
method-suggestion-no-duplication.rs
method-suggestion-no-duplication.stderr
multiple-defining-usages-in-body.rs Check that RPITs are compatible with the opaques inferred during HIR typeck too 2023-05-31 17:45:45 +00:00
multiple-defining-usages-in-body.stderr Check that RPITs are compatible with the opaques inferred during HIR typeck too 2023-05-31 17:45:45 +00:00
must_outlive_least_region_or_bound.rs
must_outlive_least_region_or_bound.stderr Label opaque type for 'captures lifetime' error message 2023-03-03 05:02:34 +00:00
needs_least_region_or_bound.rs
negative-reasoning.rs
negative-reasoning.stderr
nested_impl_trait.rs
nested_impl_trait.stderr pluralize stuff 2023-02-22 21:52:26 +00:00
nested-return-type2-tait2.rs
nested-return-type2-tait2.stderr Note predicate span on ImplDerivedObligation 2023-01-11 19:46:45 +00:00
nested-return-type2-tait3.rs
nested-return-type2-tait3.stderr Note predicate span on ImplDerivedObligation 2023-01-11 19:46:45 +00:00
nested-return-type2-tait.rs
nested-return-type2-tait.stderr Add AliasKind::Weak for type aliases. 2023-06-16 19:39:48 +00:00
nested-return-type2.rs Nested impl traits trigger opaque_hidden_inferred_bound too much 2023-03-23 06:19:52 +00:00
nested-return-type3-tait2.rs
nested-return-type3-tait2.stderr Add AliasKind::Weak for type aliases. 2023-06-16 19:39:48 +00:00
nested-return-type3-tait3.rs
nested-return-type3-tait3.stderr
nested-return-type3-tait.rs
nested-return-type3-tait.stderr Add AliasKind::Weak for type aliases. 2023-06-16 19:39:48 +00:00
nested-return-type3.rs Nested impl traits trigger opaque_hidden_inferred_bound too much 2023-03-23 06:19:52 +00:00
nested-return-type4.rs
nested-return-type4.stderr Label opaque type for 'captures lifetime' error message 2023-03-03 05:02:34 +00:00
nested-return-type.rs
nested-rpit-hrtb-2.rs don't ICE on higher ranked hidden types 2023-08-04 15:11:09 +00:00
nested-rpit-hrtb-2.stderr don't ICE on higher ranked hidden types 2023-08-04 15:11:09 +00:00
nested-rpit-hrtb.rs
nested-rpit-hrtb.stderr
nested-rpit-with-anonymous-lifetimes.rs
nesting.rs
no-method-suggested-traits.rs
no-method-suggested-traits.stderr Special-case item attributes in the suggestion output 2023-04-12 22:50:10 +00:00
no-trait.rs
no-trait.stderr
normalize-opaque-with-bound-vars.rs More tests 2023-06-27 21:36:15 +00:00
normalize-tait-in-const.rs update tests, adding known-bug 2023-07-27 15:51:02 +00:00
normalize-tait-in-const.stderr Remove constness from TraitPredicate 2023-08-02 15:38:00 +00:00
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 Modify primary span label for E0308 2023-01-30 20:12:19 +00:00
point-to-type-err-cause-on-impl-trait-return.rs Remove return type sized check hack from hir typeck 2023-05-18 01:53:01 +00:00
point-to-type-err-cause-on-impl-trait-return.stderr Remove return type sized check hack from hir typeck 2023-05-18 01:53:01 +00:00
printing-binder.rs
printing-binder.stderr
private_unused.rs
projection-mismatch-in-impl-where-clause.rs
projection-mismatch-in-impl-where-clause.stderr Note predicate span on ImplDerivedObligation 2023-01-11 19:46:45 +00:00
projection.rs
question_mark.rs
recursive-auto-trait.rs deal with opaque types without cycling 2023-07-06 11:37:21 +02:00
recursive-generator.rs Label closure captures/generator locals that make opaque types recursive 2023-01-21 05:49:36 +00:00
recursive-generator.stderr Label closure captures/generator locals that make opaque types recursive 2023-01-21 05:49:36 +00:00
recursive-impl-trait-type-direct.rs
recursive-impl-trait-type-indirect.drop_tracking_mir.stderr deal with opaque types without cycling 2023-07-06 11:37:21 +02:00
recursive-impl-trait-type-indirect.drop_tracking.stderr deal with opaque types without cycling 2023-07-06 11:37:21 +02:00
recursive-impl-trait-type-indirect.no_drop_tracking.stderr deal with opaque types without cycling 2023-07-06 11:37:21 +02:00
recursive-impl-trait-type-indirect.rs deal with opaque types without cycling 2023-07-06 11:37:21 +02:00
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 Add AliasKind::Weak for type aliases. 2023-06-16 19:39:48 +00:00
recursive-type-alias-impl-trait-declaration-too-subtle.rs
recursive-type-alias-impl-trait-declaration-too-subtle.stderr Handle weak type aliases by immediately resolving them to their aliased type 2023-06-22 15:51:19 +00:00
recursive-type-alias-impl-trait-declaration.rs Add AliasKind::Weak for type aliases. 2023-06-16 19:39:48 +00:00
recursive-type-alias-impl-trait-declaration.stderr Add AliasKind::Weak for type aliases. 2023-06-16 19:39:48 +00:00
region-escape-via-bound-contravariant-closure.rs
region-escape-via-bound-contravariant.rs
region-escape-via-bound.rs
region-escape-via-bound.stderr Label opaque type for 'captures lifetime' error message 2023-03-03 05:02:34 +00:00
return-position-impl-trait-minimal.rs
reveal-during-codegen.rs Normalize opaques during codegen in new solver 2023-07-07 16:02:25 +00:00
rpit-assoc-pair-with-lifetime.rs
rpit-not-sized.rs
rpit-not-sized.stderr
static-lifetime-return-position-impl-trait.rs accept ReStatic for RPITIT 2023-06-26 01:11:44 +09:00
static-return-lifetime-infered.rs
static-return-lifetime-infered.stderr Label opaque type for 'captures lifetime' error message 2023-03-03 05:02:34 +00:00
suggest-calling-rpit-closure.rs
suggest-calling-rpit-closure.stderr
trait_resolution.rs
trait_type.rs
trait_type.stderr
two_tait_defining_each_other2.rs
two_tait_defining_each_other2.stderr
two_tait_defining_each_other3.rs
two_tait_defining_each_other3.stderr
two_tait_defining_each_other.rs
two_tait_defining_each_other.stderr
type_parameters_captured.rs
type_parameters_captured.stderr
type-alias-generic-param.rs Split out a separate feature gate for impl trait in associated types 2023-04-12 16:17:31 +00:00
type-alias-impl-trait-in-fn-body.rs
type-arg-mismatch-due-to-impl-trait.rs
type-arg-mismatch-due-to-impl-trait.stderr
unactionable_diagnostic.fixed
unactionable_diagnostic.rs
unactionable_diagnostic.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 Special-case item attributes in the suggestion output 2023-04-12 22:50:10 +00:00
universal_wrong_hrtb.rs migrate lifetime too 2023-06-26 19:14:49 +00:00
universal_wrong_hrtb.stderr migrate lifetime too 2023-06-26 19:14:49 +00:00
universal-mismatched-type.rs
universal-mismatched-type.stderr Modify primary span label for E0308 2023-01-30 20:12:19 +00:00
universal-two-impl-traits.rs
universal-two-impl-traits.stderr
unsafety-checking-cycle.rs
variance.rs Test variances of opaque captures 2023-08-28 01:05:34 +00:00
variance.stderr Test variances of opaque captures 2023-08-28 01:05:34 +00:00
wf-eval-order.rs vars are ? 2023-04-25 19:53:09 +00:00
where-allowed-2.rs
where-allowed-2.stderr
where-allowed.rs Split out a separate feature gate for impl trait in associated types 2023-04-12 16:17:31 +00:00
where-allowed.stderr Split out a separate feature gate for impl trait in associated types 2023-04-12 16:17:31 +00:00
xcrate_simple.rs
xcrate.rs