Merge pull request #1337 from oli-obk/master

fix ice in `len_zero` lint when type has no inherent impls at all
This commit is contained in:
Martin Carton 2016-11-10 18:51:08 +01:00 committed by GitHub
commit 3edf712434
2 changed files with 19 additions and 2 deletions

View File

@ -194,11 +194,11 @@ fn has_is_empty(cx: &LateContext, expr: &Expr) -> bool {
/// Check the inherent impl's items for an `is_empty(self)` method.
fn has_is_empty_impl(cx: &LateContext, id: DefId) -> bool {
cx.tcx.inherent_impls.borrow()[&id].iter().any(|imp| {
cx.tcx.inherent_impls.borrow().get(&id).map_or(false, |impls| impls.iter().any(|imp| {
cx.tcx.impl_or_trait_items(*imp).iter().any(|item| {
is_is_empty(&cx.tcx.impl_or_trait_item(*item))
})
})
}))
}
let ty = &walk_ptrs_ty(cx.tcx.expr_ty(expr));

17
tests/ice_exacte_size.rs Normal file
View File

@ -0,0 +1,17 @@
#![feature(plugin)]
#![plugin(clippy)]
#![deny(clippy)]
#[allow(dead_code)]
struct Foo;
impl Iterator for Foo {
type Item = ();
fn next(&mut self) -> Option<()> {
let _ = self.len() == 0;
unimplemented!()
}
}
impl ExactSizeIterator for Foo { }