Files
rust/tests/ui/needless_maybe_sized.fixed

137 lines
2.3 KiB
Rust
Raw Normal View History

2023-04-11 19:47:44 +00:00
//@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: Sized>(t: &T) {}
2025-02-11 17:57:08 +01:00
//~^ needless_maybe_sized
2023-04-11 19:47:44 +00:00
trait A: Sized {}
trait B: A {}
fn depth_1<T: A>(t: &T) {}
2025-02-11 17:57:08 +01:00
//~^ needless_maybe_sized
2023-04-11 19:47:44 +00:00
fn depth_2<T: B>(t: &T) {}
2025-02-11 17:57:08 +01:00
//~^ needless_maybe_sized
2023-04-11 19:47:44 +00:00
// We only need to show one
fn multiple_paths<T: A + B>(t: &T) {}
2025-02-11 17:57:08 +01:00
//~^ needless_maybe_sized
2023-04-11 19:47:44 +00:00
fn in_where<T>(t: &T)
where
T: Sized,
2025-02-11 17:57:08 +01:00
//~^ needless_maybe_sized
2023-04-11 19:47:44 +00:00
{
}
fn mixed_1<T: Sized>(t: &T)
2025-02-11 17:57:08 +01:00
//~^ needless_maybe_sized
2023-04-11 19:47:44 +00:00
{
}
fn mixed_2<T>(t: &T)
2025-02-11 17:57:08 +01:00
//~^ needless_maybe_sized
2023-04-11 19:47:44 +00:00
where
T: Sized,
{
}
fn mixed_3<T>(t: &T)
where
T: Sized,
2025-02-11 17:57:08 +01:00
//~^ needless_maybe_sized
2023-04-11 19:47:44 +00:00
{
}
struct Struct<T: Sized>(T);
2025-02-11 17:57:08 +01:00
//~^ needless_maybe_sized
2023-04-11 19:47:44 +00:00
impl<T: Sized> Struct<T> {
2025-02-12 23:44:38 +01:00
//~^ needless_maybe_sized
2023-04-11 19:47:44 +00:00
fn method<U: Sized>(&self) {}
2025-02-11 17:57:08 +01:00
//~^ needless_maybe_sized
2023-04-11 19:47:44 +00:00
}
enum Enum<T: Sized + 'static> {
2025-02-12 23:44:38 +01:00
//~^ needless_maybe_sized
2023-04-11 19:47:44 +00:00
Variant(&'static T),
}
union Union<'a, T: Sized> {
2025-02-12 23:44:38 +01:00
//~^ needless_maybe_sized
2023-04-11 19:47:44 +00:00
a: &'a T,
}
trait Trait<T: Sized> {
2025-02-12 23:44:38 +01:00
//~^ needless_maybe_sized
2023-04-11 19:47:44 +00:00
fn trait_method<U: Sized>() {}
2025-02-11 17:57:08 +01:00
//~^ needless_maybe_sized
2023-04-11 19:47:44 +00:00
type GAT<U: Sized>;
2025-02-11 17:57:08 +01:00
//~^ needless_maybe_sized
2023-04-11 19:47:44 +00:00
type Assoc: Sized + ?Sized; // False negative
}
trait SecondInTrait: Send + Sized {}
fn second_in_trait<T: SecondInTrait>() {}
2025-02-11 17:57:08 +01:00
//~^ needless_maybe_sized
2023-04-11 19:47:44 +00:00
fn impl_trait(_: &(impl Sized)) {}
2025-02-11 17:57:08 +01:00
//~^ needless_maybe_sized
2023-04-11 19:47:44 +00:00
trait GenericTrait<T>: Sized {}
fn in_generic_trait<T: GenericTrait<U>, U>() {}
2025-02-11 17:57:08 +01:00
//~^ needless_maybe_sized
2023-04-11 19:47:44 +00:00
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<T: A1>() {}
2025-02-11 17:57:08 +01:00
//~^ needless_maybe_sized
2023-04-11 19:47:44 +00:00
}
// Should not lint
fn sized<T: Sized>() {}
fn maybe_sized<T: ?Sized>() {}
struct SeparateBounds<T: ?Sized>(T);
impl<T: Sized> SeparateBounds<T> {}
trait P {}
trait Q: P {}
fn ok_depth_1<T: P + ?Sized>() {}
fn ok_depth_2<T: Q + ?Sized>() {}
external! {
fn in_macro<T: Clone + ?Sized>(t: &T) {}
fn with_local_clone<T: $Clone + ?Sized>(t: &T) {}
}
#[derive(Clone)]
struct InDerive<T: ?Sized> {
t: T,
}
struct Refined<T: ?Sized>(T);
impl<T: Sized> Refined<T> {}
fn main() {}