diff --git a/clippy_lints/src/types.rs b/clippy_lints/src/types.rs index 79e9f4f27d24..227b10cd29a6 100644 --- a/clippy_lints/src/types.rs +++ b/clippy_lints/src/types.rs @@ -2239,8 +2239,10 @@ impl<'a, 'b, 'tcx: 'a + 'b> ImplicitHasherConstructorVisitor<'a, 'b, 'tcx> { impl<'a, 'b, 'tcx: 'a + 'b> Visitor<'tcx> for ImplicitHasherConstructorVisitor<'a, 'b, 'tcx> { fn visit_body(&mut self, body: &'tcx Body) { + let prev_body = self.body; self.body = self.cx.tcx.body_tables(body.id()); walk_body(self, body); + self.body = prev_body; } fn visit_expr(&mut self, e: &'tcx Expr) { diff --git a/tests/ui/ice-3717.rs b/tests/ui/ice-3717.rs new file mode 100644 index 000000000000..21c48f4749cc --- /dev/null +++ b/tests/ui/ice-3717.rs @@ -0,0 +1,8 @@ +use std::collections::HashSet; + +fn main() {} + +pub fn ice_3717(_: &HashSet) { + let _ = [0u8; 0]; + let _: HashSet = HashSet::new(); +} diff --git a/tests/ui/ice-3717.stderr b/tests/ui/ice-3717.stderr new file mode 100644 index 000000000000..08c53c399c26 --- /dev/null +++ b/tests/ui/ice-3717.stderr @@ -0,0 +1,18 @@ +error: parameter of type `HashSet` should be generalized over different hashers + --> $DIR/ice-3717.rs:5:21 + | +LL | pub fn ice_3717(_: &HashSet) { + | ^^^^^^^^^^^^^^ + | + = note: `-D clippy::implicit-hasher` implied by `-D warnings` +help: consider adding a type parameter + | +LL | pub fn ice_3717(_: &HashSet) { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ +help: ...and use generic constructor + | +LL | let _: HashSet = HashSet::default(); + | ^^^^^^^^^^^^^^^^^^ + +error: aborting due to previous error +