//@aux-build:proc_macros.rs #![allow(unused, clippy::multiple_bound_locations)] #![warn(clippy::needless_maybe_sized)] extern crate proc_macros; use proc_macros::external; fn directly(t: &T) {} //~^ needless_maybe_sized trait A: Sized {} trait B: A {} fn depth_1(t: &T) {} //~^ needless_maybe_sized fn depth_2(t: &T) {} //~^ needless_maybe_sized // We only need to show one fn multiple_paths(t: &T) {} //~^ needless_maybe_sized fn in_where(t: &T) where T: Sized + ?Sized, //~^ needless_maybe_sized { } fn mixed_1(t: &T) where T: ?Sized, //~^ needless_maybe_sized { } fn mixed_2(t: &T) //~^ needless_maybe_sized where T: Sized, { } fn mixed_3(t: &T) where T: Sized, T: ?Sized, //~^ needless_maybe_sized { } struct Struct(T); //~^ needless_maybe_sized impl Struct { //~^ needless_maybe_sized fn method(&self) {} //~^ needless_maybe_sized } enum Enum { //~^ needless_maybe_sized Variant(&'static T), } union Union<'a, T: Sized + ?Sized> { //~^ needless_maybe_sized a: &'a T, } trait Trait { //~^ needless_maybe_sized fn trait_method() {} //~^ needless_maybe_sized type GAT; //~^ needless_maybe_sized type Assoc: Sized + ?Sized; // False negative } trait SecondInTrait: Send + Sized {} fn second_in_trait() {} //~^ needless_maybe_sized fn impl_trait(_: &(impl Sized + ?Sized)) {} //~^ needless_maybe_sized trait GenericTrait: Sized {} fn in_generic_trait + ?Sized, U>() {} //~^ needless_maybe_sized mod larger_graph { // C1 C2 Sized // \ /\ / // B1 B2 // \ / // A1 trait C1 {} trait C2 {} trait B1: C1 + C2 {} trait B2: C2 + Sized {} trait A1: B1 + B2 {} fn larger_graph() {} //~^ needless_maybe_sized } // Should not lint fn sized() {} fn maybe_sized() {} struct SeparateBounds(T); impl SeparateBounds {} trait P {} trait Q: P {} fn ok_depth_1() {} fn ok_depth_2() {} external! { fn in_macro(t: &T) {} fn with_local_clone(t: &T) {} } #[derive(Clone)] struct InDerive { t: T, } struct Refined(T); impl Refined {} fn main() {}