| // run-rustfix |
| #![deny(clippy::trait_duplication_in_bounds)] |
| #![allow(unused)] |
| |
| fn bad_foo<T: Clone + Clone + Clone + Copy, U: Clone + Copy>(arg0: T, argo1: U) { |
| unimplemented!(); |
| } |
| |
| fn bad_bar<T, U>(arg0: T, arg1: U) |
| where |
| T: Clone + Clone + Clone + Copy, |
| U: Clone + Copy, |
| { |
| unimplemented!(); |
| } |
| |
| fn good_bar<T: Clone + Copy, U: Clone + Copy>(arg0: T, arg1: U) { |
| unimplemented!(); |
| } |
| |
| fn good_foo<T, U>(arg0: T, arg1: U) |
| where |
| T: Clone + Copy, |
| U: Clone + Copy, |
| { |
| unimplemented!(); |
| } |
| |
| trait GoodSelfTraitBound: Clone + Copy { |
| fn f(); |
| } |
| |
| trait GoodSelfWhereClause { |
| fn f() |
| where |
| Self: Clone + Copy; |
| } |
| |
| trait BadSelfTraitBound: Clone + Clone + Clone { |
| fn f(); |
| } |
| |
| trait BadSelfWhereClause { |
| fn f() |
| where |
| Self: Clone + Clone + Clone; |
| } |
| |
| trait GoodTraitBound<T: Clone + Copy, U: Clone + Copy> { |
| fn f(); |
| } |
| |
| trait GoodWhereClause<T, U> { |
| fn f() |
| where |
| T: Clone + Copy, |
| U: Clone + Copy; |
| } |
| |
| trait BadTraitBound<T: Clone + Clone + Clone + Copy, U: Clone + Copy> { |
| fn f(); |
| } |
| |
| trait BadWhereClause<T, U> { |
| fn f() |
| where |
| T: Clone + Clone + Clone + Copy, |
| U: Clone + Copy; |
| } |
| |
| struct GoodStructBound<T: Clone + Copy, U: Clone + Copy> { |
| t: T, |
| u: U, |
| } |
| |
| impl<T: Clone + Copy, U: Clone + Copy> GoodTraitBound<T, U> for GoodStructBound<T, U> { |
| // this should not warn |
| fn f() {} |
| } |
| |
| struct GoodStructWhereClause; |
| |
| impl<T, U> GoodTraitBound<T, U> for GoodStructWhereClause |
| where |
| T: Clone + Copy, |
| U: Clone + Copy, |
| { |
| // this should not warn |
| fn f() {} |
| } |
| |
| fn no_error_separate_arg_bounds(program: impl AsRef<()>, dir: impl AsRef<()>, args: &[impl AsRef<()>]) {} |
| |
| trait GenericTrait<T> {} |
| |
| fn good_generic<T: GenericTrait<u64> + GenericTrait<u32>>(arg0: T) { |
| unimplemented!(); |
| } |
| |
| fn bad_generic<T: GenericTrait<u64> + GenericTrait<u32> + GenericTrait<u64>>(arg0: T) { |
| unimplemented!(); |
| } |
| |
| mod foo { |
| pub trait Clone {} |
| } |
| |
| fn qualified_path<T: std::clone::Clone + Clone + foo::Clone>(arg0: T) { |
| unimplemented!(); |
| } |
| |
| fn main() {} |