#![feature(strict_provenance)] | |
use core::ptr; | |
fn main() { | |
unsafe { | |
let base = ptr::without_provenance::<()>(10); | |
let unit = &*base; | |
let p1 = unit as *const (); | |
let base = ptr::without_provenance::<()>(11); | |
let unit = &*base; | |
let p2 = unit as *const (); | |
// Seems to work because they are same pointer | |
// even though it's dangling. | |
let _ = p1.byte_offset_from(p1); | |
// UB because different pointers. | |
let _ = p1.byte_offset_from(p2); //~ERROR: different pointers without provenance | |
} | |
} |