//@ run-pass #![allow(unused_variables)] #![allow(unused_imports)] // Test that we don't trigger on the blanket impl for all `&'a T` but // rather keep autoderefing and trigger on the underlying impl. To // know not to stop at the blanket, we have to recursively evaluate // the `T:Foo` bound. //@ pretty-expanded FIXME #23616 use std::marker::Sized; // Note: this must be generic for the problem to show up trait Foo { //~ WARN trait `Foo` is never used fn foo(&self, a: A); } impl Foo for [u8] { fn foo(&self, a: u8) {} } impl<'a, A, T> Foo for &'a T where T: Foo { fn foo(&self, a: A) { Foo::foo(*self, a) } } trait Bar { fn foo(&self); } struct MyType; impl Bar for MyType { fn foo(&self) {} } fn main() { let mut m = MyType; (&mut m).foo() }