]>
Commit | Line | Data |
---|---|---|
f20569fa XL |
1 | use std::fmt::Debug; |
2 | use std::ptr; | |
3 | use std::rc::Rc; | |
4 | use std::sync::Arc; | |
5 | ||
6 | #[warn(clippy::vtable_address_comparisons)] | |
5099ac24 FG |
7 | #[allow(clippy::borrow_as_ptr)] |
8 | ||
f20569fa XL |
9 | fn main() { |
10 | let a: *const dyn Debug = &1 as &dyn Debug; | |
11 | let b: *const dyn Debug = &1 as &dyn Debug; | |
12 | ||
13 | // These should fail: | |
14 | let _ = a == b; | |
781aab86 | 15 | //~^ ERROR: comparing trait object pointers compares a non-unique vtable address |
f20569fa | 16 | let _ = a != b; |
781aab86 | 17 | //~^ ERROR: comparing trait object pointers compares a non-unique vtable address |
f20569fa | 18 | let _ = a < b; |
781aab86 | 19 | //~^ ERROR: comparing trait object pointers compares a non-unique vtable address |
f20569fa | 20 | let _ = a <= b; |
781aab86 | 21 | //~^ ERROR: comparing trait object pointers compares a non-unique vtable address |
f20569fa | 22 | let _ = a > b; |
781aab86 | 23 | //~^ ERROR: comparing trait object pointers compares a non-unique vtable address |
f20569fa | 24 | let _ = a >= b; |
781aab86 | 25 | //~^ ERROR: comparing trait object pointers compares a non-unique vtable address |
f20569fa | 26 | ptr::eq(a, b); |
781aab86 | 27 | //~^ ERROR: comparing trait object pointers compares a non-unique vtable address |
f20569fa XL |
28 | |
29 | let a = &1 as &dyn Debug; | |
30 | let b = &1 as &dyn Debug; | |
31 | ptr::eq(a, b); | |
781aab86 | 32 | //~^ ERROR: comparing trait object pointers compares a non-unique vtable address |
f20569fa | 33 | |
f20569fa XL |
34 | // These should be fine: |
35 | let a = &1; | |
36 | ptr::eq(a, a); | |
37 | ||
38 | let a = Rc::new(1); | |
39 | Rc::ptr_eq(&a, &a); | |
40 | ||
41 | let a = Arc::new(1); | |
42 | Arc::ptr_eq(&a, &a); | |
43 | ||
fe692bf9 FG |
44 | let a: Rc<dyn Debug> = Rc::new(1); |
45 | Rc::ptr_eq(&a, &a); | |
46 | ||
47 | let a: Arc<dyn Debug> = Arc::new(1); | |
48 | Arc::ptr_eq(&a, &a); | |
49 | ||
f20569fa XL |
50 | let a: &[u8] = b""; |
51 | ptr::eq(a, a); | |
52 | } |