File tree Expand file tree Collapse file tree 6 files changed +140
-59
lines changed Expand file tree Collapse file tree 6 files changed +140
-59
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+ // Here we test behavior of occurrences of `impl Trait` within a path
4+ // component in that context.
5+
6+ mod allowed {
7+ #![ allow( nested_impl_trait) ]
8+
9+ pub trait Bar { }
10+ pub trait Quux < T > { type Assoc ; }
11+ pub fn demo ( _: impl Quux < ( ) , Assoc =<( ) as Quux < impl Bar > >:: Assoc > ) { }
12+ impl < T > Quux < T > for ( ) { type Assoc = u32 ; }
13+ }
14+
15+ mod warned {
16+ #![ warn( nested_impl_trait) ]
17+
18+ pub trait Bar { }
19+ pub trait Quux < T > { type Assoc ; }
20+ pub fn demo ( _: impl Quux < ( ) , Assoc =<( ) as Quux < impl Bar > >:: Assoc > ) { }
21+ //~^ WARN `impl Trait` is not allowed in path parameters
22+ //~| WARN will become a hard error in a future release!
23+ impl < T > Quux < T > for ( ) { type Assoc = u32 ; }
24+ }
25+
26+ mod denied {
27+ #![ deny( nested_impl_trait) ]
28+
29+ pub trait Bar { }
30+ pub trait Quux < T > { type Assoc ; }
31+ pub fn demo ( _: impl Quux < ( ) , Assoc =<( ) as Quux < impl Bar > >:: Assoc > ) { }
32+ //~^ ERROR `impl Trait` is not allowed in path parameters
33+ //~| WARN will become a hard error in a future release!
34+ impl < T > Quux < T > for ( ) { type Assoc = u32 ; }
35+ }
36+
37+ fn main ( ) { }
Original file line number Diff line number Diff line change 1+ warning: `impl Trait` is not allowed in path parameters
2+ --> $DIR/issue-57979-impl-trait-in-path.rs:20:52
3+ |
4+ LL | pub fn demo(_: impl Quux<(), Assoc=<() as Quux<impl Bar>>::Assoc>) { }
5+ | ^^^^^^^^
6+ |
7+ note: lint level defined here
8+ --> $DIR/issue-57979-impl-trait-in-path.rs:16:13
9+ |
10+ LL | #![warn(nested_impl_trait)]
11+ | ^^^^^^^^^^^^^^^^^
12+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
13+ = note: for more information, see issue #59014 <https://github.com/rust-lang/rust/issues/59014>
14+
15+ error: `impl Trait` is not allowed in path parameters
16+ --> $DIR/issue-57979-impl-trait-in-path.rs:31:52
17+ |
18+ LL | pub fn demo(_: impl Quux<(), Assoc=<() as Quux<impl Bar>>::Assoc>) { }
19+ | ^^^^^^^^
20+ |
21+ note: lint level defined here
22+ --> $DIR/issue-57979-impl-trait-in-path.rs:27:13
23+ |
24+ LL | #![deny(nested_impl_trait)]
25+ | ^^^^^^^^^^^^^^^^^
26+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
27+ = note: for more information, see issue #59014 <https://github.com/rust-lang/rust/issues/59014>
28+
29+ error: aborting due to previous error
30+
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+ // Here we test behavior of occurrences of `impl Trait` within an
4+ // `impl Trait` in that context.
5+
6+ mod allowed {
7+ #![ allow( nested_impl_trait) ]
8+
9+ pub trait Foo < T > { }
10+ pub trait Bar { }
11+ pub trait Quux { type Assoc ; }
12+ pub fn demo ( _: impl Quux < Assoc =impl Foo < impl Bar > > ) { }
13+ }
14+
15+ mod warned {
16+ #![ warn( nested_impl_trait) ]
17+
18+ pub trait Foo < T > { }
19+ pub trait Bar { }
20+ pub trait Quux { type Assoc ; }
21+ pub fn demo ( _: impl Quux < Assoc =impl Foo < impl Bar > > ) { }
22+ //~^ WARN nested `impl Trait` is not allowed
23+ //~| WARN will become a hard error in a future release!
24+ }
25+
26+ mod denied {
27+ #![ deny( nested_impl_trait) ]
28+
29+ pub trait Foo < T > { }
30+ pub trait Bar { }
31+ pub trait Quux { type Assoc ; }
32+ pub fn demo ( _: impl Quux < Assoc =impl Foo < impl Bar > > ) { }
33+ //~^ ERROR nested `impl Trait` is not allowed
34+ //~| WARN will become a hard error in a future release!
35+ }
36+
37+ fn main ( ) { }
Original file line number Diff line number Diff line change 1+ warning: nested `impl Trait` is not allowed
2+ --> $DIR/issue-57979-nested-impl-trait-in-assoc-proj.rs:21:45
3+ |
4+ LL | pub fn demo(_: impl Quux<Assoc=impl Foo<impl Bar>>) { }
5+ | ---------^^^^^^^^-
6+ | | |
7+ | | nested `impl Trait` here
8+ | outer `impl Trait`
9+ |
10+ note: lint level defined here
11+ --> $DIR/issue-57979-nested-impl-trait-in-assoc-proj.rs:16:13
12+ |
13+ LL | #![warn(nested_impl_trait)]
14+ | ^^^^^^^^^^^^^^^^^
15+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
16+ = note: for more information, see issue #59014 <https://github.com/rust-lang/rust/issues/59014>
17+
18+ error: nested `impl Trait` is not allowed
19+ --> $DIR/issue-57979-nested-impl-trait-in-assoc-proj.rs:32:45
20+ |
21+ LL | pub fn demo(_: impl Quux<Assoc=impl Foo<impl Bar>>) { }
22+ | ---------^^^^^^^^-
23+ | | |
24+ | | nested `impl Trait` here
25+ | outer `impl Trait`
26+ |
27+ note: lint level defined here
28+ --> $DIR/issue-57979-nested-impl-trait-in-assoc-proj.rs:27:13
29+ |
30+ LL | #![deny(nested_impl_trait)]
31+ | ^^^^^^^^^^^^^^^^^
32+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
33+ = note: for more information, see issue #59014 <https://github.com/rust-lang/rust/issues/59014>
34+
35+ error: aborting due to previous error
36+
Load Diff This file was deleted.
Load Diff This file was deleted.
You can’t perform that action at this time.
0 commit comments