3357: Check existential types in `use_self` r=oli-obk a=HMPerson1

Fixes #3231

Co-authored-by: HMPerson1 <hmperson1@gmail.com>
This commit is contained in:
bors[bot]
2018-10-26 08:48:12 +00:00
3 changed files with 22 additions and 2 deletions
+1 -1
View File
@@ -226,6 +226,6 @@ fn visit_path(&mut self, path: &'tcx Path, _id: HirId) {
}
fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> {
NestedVisitorMap::OnlyBodies(&self.cx.tcx.hir)
NestedVisitorMap::All(&self.cx.tcx.hir)
}
}
+14
View File
@@ -205,3 +205,17 @@ fn into_bytes(&self) -> Vec<u8> {
}
}
}
mod existential {
struct Foo;
impl Foo {
fn bad(foos: &[Self]) -> impl Iterator<Item=&Foo> {
foos.iter()
}
fn good(foos: &[Self]) -> impl Iterator<Item=&Self> {
foos.iter()
}
}
}
+7 -1
View File
@@ -120,5 +120,11 @@ error: unnecessary structure name repetition
119 | fn mul(self, rhs: Bad) -> Bad {
| ^^^ help: use the applicable keyword: `Self`
error: aborting due to 20 previous errors
error: unnecessary structure name repetition
--> $DIR/use_self.rs:213:54
|
213 | fn bad(foos: &[Self]) -> impl Iterator<Item=&Foo> {
| ^^^ help: use the applicable keyword: `Self`
error: aborting due to 21 previous errors