### What it does Checks for functions taking arguments by value, where the argument type is `Copy` and large enough to be worth considering passing by reference. Does not trigger if the function is being exported, because that might induce API breakage, if the parameter is declared as mutable, or if the argument is a `self`. ### Why is this bad? Arguments passed by value might result in an unnecessary shallow copy, taking up more space in the stack and requiring a call to `memcpy`, which can be expensive. ### Example ``` #[derive(Clone, Copy)] struct TooLarge([u8; 2048]); fn foo(v: TooLarge) {} ``` Use instead: ``` fn foo(v: &TooLarge) {} ```