Type Alias Impl Trait Tests

Test cases live in ui/type-alias-impl-trait/

Test cases: stabilization report

Test Case Variant Example File name
Defining use is in a submodule
https://github.com/rust-lang/rust/pull/88172
Defining use that doesn't meet the required bounds https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/bounds-are-checked.rs
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.rs
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/generic_underconstrained.rs
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/generic_underconstrained2.rs
https://github.com/rust-lang/rust/pull/88182
Use of impl Trait in an impl as value of an associated type
impl Service { type Future = impl Future; fn foo() -> Self::Future { ... } } https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/associated-type-alias-impl-trait.rs
Desugaring
Principle: any place that the value of the impl Trait is uniquely determined by the value of Foo
use of impl Trait in a tuple
type Foo = (impl Trait, u32)
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-tuple.rs
https://github.com/rust-lang/rust/pull/88183
use of impl Trait in a struct argument
type Foo = Vec<impl Trait> https://github.com/rust-lang/rust/pull/88189
use of impl Trait in an impl as the value for an associated type in a dyn
type Foo = Box<dyn Iterator<Item = impl Debug>> https://github.com/rust-lang/rust/pull/88192
use of impl Trait in an impl as the value for an associated type in an impl trait
type Foo = impl Iterator<Item = impl Debug> https://github.com/rust-lang/rust/pull/88194
type Bar = impl Debug; type Foo = impl Iterator<Item = Bar> https://github.com/rust-lang/rust/pull/88194
use in a fn type type Foo = fn(impl Trait)
type Foo = fn(impl Debug) https://github.com/rust-lang/rust/pull/88197
Incomplete inference for the type (some parts unspecified) https://github.com/rust-lang/rust/pull/88201
Disagreement between fns in types https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/different_defining_uses.rs
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type.rs
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type2.rs
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/generic_different_defining_uses.rs
Disagreement between fns in the lifetimes https://github.com/rust-lang/rust/pull/88210
Use outside of a "defining use"
type of a let https://github.com/rust-lang/rust/pull/88314
argument types https://github.com/rust-lang/rust/pull/88332
field types https://github.com/rust-lang/rust/pull/88348
static/const type ? https://github.com/rust-lang/rust/pull/88349
TODO input type in impl Trait (knowing the self type doesn't tell us the other type parameters)
type Bar = impl Debug; type Foo = impl PartialEq<Bar>;
type Bar = impl Debug; fn foo() -> impl PartialEq<Bar> { }
compiles today if inference can succeed https://github.com/rust-lang/rust/pull/88406
but not otherwise https://github.com/rust-lang/rust/pull/88406
Defining use sites:
value of an associated type
type Foo = impl Trait; impl Foo { type Item = Foo } https://github.com/rust-lang/rust/pull/88194
function return type
type Foo = impl Trait; fn foo() -> Foo { } https://github.com/rust-lang/rust/blob/7b0e554ee2c94e9b3865a8c2d24d720224512dec/src/test/ui/type-alias-impl-trait/type-alias-impl-trait.rs
Inference cycle https://github.com/rust-lang/rust/pull/88408
Auto trait leakage https://github.com/rust-lang/rust/pull/88409
Weird return types:
-> impl Future<Output = N>
-> impl Trait<N>
fn(N)

Test cases: others

Test Case Variant Example File name
General scenarios test case https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/type-alias-impl-trait.rs
Const generics in an associated opaque type defining use https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/assoc-type-const.rs
Unconstrained lifetime parameters are not allowed in associated opaque type https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/assoc-type-lifetime-unconstrained.rs
Defining usages when lifetimes are used in an associated opaque type https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/assoc-type-lifetime.rs
Bounds reduction https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/bound_reduction.rs
non defining use in defining scope https://github.com/rust-lang/rust/blob/master/src/test/ui/master/bound_reduction2.rs
Coherence https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/coherence.rs
Cross crate https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/cross_crate_ice.rs
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/cross_crate_ice2.rs
Declared but never defined https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/declared_but_never_defined.rs
Declared but not defined in scope https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.rs
Correctly handle the instantiated inference variable being completely unconstrained https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/fallback.rs
Duplicated lifetime on defining use https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.rs
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use.rs
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use2.rs
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use3.rs
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use4.rs
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.rs
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.rs
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use7.rs
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.rs
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.rs
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use10.rs
Generic Lifetime Parameter https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/generic_lifetime_param.rs
Unused generic parameter https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/unused_generic_param.rs
Generic non defining use https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/generic_nondefining_use.rs
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/not_a_defining_use.rs
Trait not specified on definition https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/generic_not_used.rs
Not provided trait does not live long enough (?) https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.rs
Multiple defining uses that resolve to the same https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn-pass.rs
Multiple different defining uses https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.rs
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn2.rs
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn3.rs
TAIT defined and used in a module https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/nested_type_alias_impl_trait.rs
TAIT nested in associated type https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/type-alias-nested-impl-trait.rs
Never reveal concrete type https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/never_reveal_concrete_type.rs
No defining use https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/no_inferrable_concrete_type.rs
Not well formed https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/not_well_formed.rs
Defining use outside the definition module https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/no_revealing_outside_defining_module.rs
Structural match no leak https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/structural-match-no-leak.rs
Not structural match https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/structural-match.rs
const items constrain opaque types https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-const.rs
impl trait Sized https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-sized.rs
Cycle error https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error.rs
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error2.rs
With no trait https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-no-traits.rs
Regression
Associated type impl trait used with an unconstrained type parameter doesn't ICE https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/impl-with-unconstrained-param.rs
Incoherent Associate Type https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/incoherent-assoc-imp-trait.rs
Unconstrained lifetimes https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-unconstrained-lifetime.rs
General
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/issue*
https://github.com/rust-lang/rust/blob/master/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-fns.rs
Select a repo