-
Notifications
You must be signed in to change notification settings - Fork 12.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Shadowing the associated type of a supertrait is allowed. This however makes it impossible to set the associated type of the supertrait in a dyn object. This PR makes the error message for that case clearer, like adding a note that shadowing is happening, as well as suggesting renaming of one of the associated types.
- Loading branch information
1 parent
0b8a61b
commit 1404dbd
Showing
5 changed files
with
119 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
15 changes: 15 additions & 0 deletions
15
tests/ui/associated-types/associated-type-shadowed-from-non-local-supertrait.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
// Test that no help message is emitted that suggests renaming the | ||
// associated type from a non-local trait | ||
|
||
pub trait NewIter: Iterator { | ||
type Item; | ||
} | ||
|
||
impl<T> Clone for Box<dyn NewIter<Item = T>> { | ||
//~^ ERROR the value of the associated type `Item` in `Iterator` must be specified | ||
fn clone(&self) -> Self { | ||
unimplemented!(); | ||
} | ||
} | ||
|
||
pub fn main() {} |
12 changes: 12 additions & 0 deletions
12
tests/ui/associated-types/associated-type-shadowed-from-non-local-supertrait.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
error[E0191]: the value of the associated type `Item` in `Iterator` must be specified | ||
--> $DIR/associated-type-shadowed-from-non-local-supertrait.rs:8:27 | ||
| | ||
LL | type Item; | ||
| --------- `Iterator::Item` shadowed here, consider renaming it | ||
... | ||
LL | impl<T> Clone for Box<dyn NewIter<Item = T>> { | ||
| ^^^^^^^^^^^^^^^^^ associated type `Item` must be specified | ||
|
||
error: aborting due to 1 previous error | ||
|
||
For more information about this error, try `rustc --explain E0191`. |
19 changes: 19 additions & 0 deletions
19
tests/ui/associated-types/associated-type-shadowed-from-supertrait.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
// Test Setting the value of an associated type | ||
// that is shadowed from a supertrait | ||
|
||
pub trait Super { | ||
type X; | ||
} | ||
|
||
pub trait Sub: Super { | ||
type X; | ||
} | ||
|
||
impl<T> Clone for Box<dyn Sub<X = T>> { | ||
//~^ ERROR value of the associated type `X` in `Super` must be specified | ||
fn clone(&self) -> Self { | ||
unimplemented!(); | ||
} | ||
} | ||
|
||
pub fn main() {} |
15 changes: 15 additions & 0 deletions
15
tests/ui/associated-types/associated-type-shadowed-from-supertrait.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
error[E0191]: the value of the associated type `X` in `Super` must be specified | ||
--> $DIR/associated-type-shadowed-from-supertrait.rs:12:27 | ||
| | ||
LL | type X; | ||
| ------ `Super::X` defined here, consider renaming it | ||
... | ||
LL | type X; | ||
| ------ `Super::X` shadowed here, consider renaming it | ||
... | ||
LL | impl<T> Clone for Box<dyn Sub<X = T>> { | ||
| ^^^^^^^^^^ associated type `X` must be specified | ||
|
||
error: aborting due to 1 previous error | ||
|
||
For more information about this error, try `rustc --explain E0191`. |