It suggests this code
let a = &[1, 2, 3];
let b = &[1, 2, 3];
assert!(a as *const _ as usize == b as *const _ as usize);
should be turned into
let a = &[1, 2, 3];
let b = &[1, 2, 3];
assert!(std::ptr::eq(a, b));
I admit the fix is good, but variable a and b are not guaranteed to be in the same address.
Also see
- a similar question: Are const references guaranteed to point to the same object?
- Constant items - The Rust Reference
References to the same constant are not necessarily guaranteed to refer to the same memory address.
[1, 2, 3]
can even be different constants conceptually?
Will the folllowing fix be better?
let a = &[1, 2, 3];
assert!(a as *const _ as usize == a as *const _ as usize);
👇
let a = &[1, 2, 3];
assert!(std::ptr::eq(a, a));
Or this better?
let a = &[1, 2, 3];
let b = &[1, 2, 3];
let _ = (a as *const _ as usize == b as *const _ as usize);
👇// assert_eq! doesn't matter at all here
let a = &[1, 2, 3];
let b = &[1, 2, 3];
let _ = std::ptr::eq(a, b);