]> git.proxmox.com Git - rustc.git/blame - src/tools/clippy/tests/ui/vtable_address_comparisons.rs
New upstream version 1.74.1+dfsg1
[rustc.git] / src / tools / clippy / tests / ui / vtable_address_comparisons.rs
CommitLineData
f20569fa
XL
1use std::fmt::Debug;
2use std::ptr;
3use std::rc::Rc;
4use std::sync::Arc;
5
6#[warn(clippy::vtable_address_comparisons)]
5099ac24
FG
7#[allow(clippy::borrow_as_ptr)]
8
f20569fa
XL
9fn 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}