]> git.lizzy.rs Git - rust.git/blob - tests/ui/auto-traits/suspicious-impls-lint.rs
Merge commit '7f27e2e74ef957baa382dc05cf08df6368165c74' into clippyup
[rust.git] / tests / ui / auto-traits / suspicious-impls-lint.rs
1 #![deny(suspicious_auto_trait_impls)]
2
3 use std::marker::PhantomData;
4
5 struct MayImplementSendOk<T>(T);
6 unsafe impl<T: Send> Send for MayImplementSendOk<T> {} // ok
7
8 struct MayImplementSendErr<T>(T);
9 unsafe impl<T: Send> Send for MayImplementSendErr<&T> {}
10 //~^ ERROR
11 //~| WARNING this will change its meaning
12
13 struct ContainsNonSendDirect<T>(*const T);
14 unsafe impl<T: Send> Send for ContainsNonSendDirect<&T> {} // ok
15
16 struct ContainsPtr<T>(*const T);
17 struct ContainsIndirectNonSend<T>(ContainsPtr<T>);
18 unsafe impl<T: Send> Send for ContainsIndirectNonSend<&T> {} // ok
19
20 struct ContainsVec<T>(Vec<T>);
21 unsafe impl Send for ContainsVec<i32> {}
22 //~^ ERROR
23 //~| WARNING this will change its meaning
24
25 struct TwoParams<T, U>(T, U);
26 unsafe impl<T: Send, U: Send> Send for TwoParams<T, U> {} // ok
27
28 struct TwoParamsFlipped<T, U>(T, U);
29 unsafe impl<T: Send, U: Send> Send for TwoParamsFlipped<U, T> {} // ok
30
31 struct TwoParamsSame<T, U>(T, U);
32 unsafe impl<T: Send> Send for TwoParamsSame<T, T> {}
33 //~^ ERROR
34 //~| WARNING this will change its meaning
35
36 pub struct WithPhantomDataNonSend<T, U>(PhantomData<*const T>, U);
37 unsafe impl<T> Send for WithPhantomDataNonSend<T, i8> {} // ok
38
39 pub struct WithPhantomDataSend<T, U>(PhantomData<T>, U);
40 unsafe impl<T> Send for WithPhantomDataSend<*const T, i8> {}
41 //~^ ERROR
42 //~| WARNING this will change its meaning
43
44 pub struct WithLifetime<'a, T>(&'a (), T);
45 unsafe impl<T> Send for WithLifetime<'static, T> {} // ok
46 unsafe impl<T> Sync for WithLifetime<'static, Vec<T>> {}
47 //~^ ERROR
48 //~| WARNING this will change its meaning
49
50 fn main() {}