File tree Expand file tree Collapse file tree 2 files changed +72
-0
lines changed Expand file tree Collapse file tree 2 files changed +72
-0
lines changed Original file line number Diff line number Diff line change 1+ // rust-lang/rust#57979 : the initial support for `impl Trait` didn't
2+ // properly check syntax hidden behind an associated type projection,
3+ // but it did catch *some cases*. This is checking that we continue to
4+ // properly emit errors for those, even with the new
5+ // future-incompatibility warnings.
6+ //
7+ // issue-57979-nested-impl-trait-in-assoc-proj.rs shows the main case
8+ // that we were previously failing to catch.
9+
10+ struct Deeper < T > ( T ) ;
11+
12+ mod allowed {
13+ #![ allow( nested_impl_trait) ]
14+
15+ pub trait Foo < T > { }
16+ pub trait Bar { }
17+ pub trait Quux { type Assoc ; }
18+ pub fn demo ( _: impl Quux < Assoc =super :: Deeper < impl Foo < impl Bar > > > ) { }
19+ //~^ ERROR nested `impl Trait` is not allowed
20+ }
21+
22+ mod warned {
23+ #![ warn( nested_impl_trait) ]
24+
25+ pub trait Foo < T > { }
26+ pub trait Bar { }
27+ pub trait Quux { type Assoc ; }
28+ pub fn demo ( _: impl Quux < Assoc =super :: Deeper < impl Foo < impl Bar > > > ) { }
29+ //~^ ERROR nested `impl Trait` is not allowed
30+ }
31+
32+ mod denied {
33+ #![ deny( nested_impl_trait) ]
34+
35+ pub trait Foo < T > { }
36+ pub trait Bar { }
37+ pub trait Quux { type Assoc ; }
38+ pub fn demo ( _: impl Quux < Assoc =super :: Deeper < impl Foo < impl Bar > > > ) { }
39+ //~^ ERROR nested `impl Trait` is not allowed
40+ }
41+
42+ fn main ( ) { }
Original file line number Diff line number Diff line change 1+ error[E0666]: nested `impl Trait` is not allowed
2+ --> $DIR/issue-57979-deeply-nested-impl-trait-in-assoc-proj.rs:18:59
3+ |
4+ LL | pub fn demo(_: impl Quux<Assoc=super::Deeper<impl Foo<impl Bar>>>) { }
5+ | ---------^^^^^^^^-
6+ | | |
7+ | | nested `impl Trait` here
8+ | outer `impl Trait`
9+
10+ error[E0666]: nested `impl Trait` is not allowed
11+ --> $DIR/issue-57979-deeply-nested-impl-trait-in-assoc-proj.rs:28:59
12+ |
13+ LL | pub fn demo(_: impl Quux<Assoc=super::Deeper<impl Foo<impl Bar>>>) { }
14+ | ---------^^^^^^^^-
15+ | | |
16+ | | nested `impl Trait` here
17+ | outer `impl Trait`
18+
19+ error[E0666]: nested `impl Trait` is not allowed
20+ --> $DIR/issue-57979-deeply-nested-impl-trait-in-assoc-proj.rs:38:59
21+ |
22+ LL | pub fn demo(_: impl Quux<Assoc=super::Deeper<impl Foo<impl Bar>>>) { }
23+ | ---------^^^^^^^^-
24+ | | |
25+ | | nested `impl Trait` here
26+ | outer `impl Trait`
27+
28+ error: aborting due to 3 previous errors
29+
30+ For more information about this error, try `rustc --explain E0666`.
You can’t perform that action at this time.
0 commit comments