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
commit ead29847ff
3 changed files with 22 additions and 2 deletions

View file

@ -226,6 +226,6 @@ impl<'a, 'tcx> Visitor<'tcx> for UseSelfVisitor<'a, 'tcx> {
}
fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'tcx> {
NestedVisitorMap::OnlyBodies(&self.cx.tcx.hir)
NestedVisitorMap::All(&self.cx.tcx.hir)
}
}

View file

@ -205,3 +205,17 @@ mod issue2894 {
}
}
}
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()
}
}
}

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