#![allow(dead_code, deprecated, unused_variables, unused_mut)] #![feature(ptr_mask)] fn main() { let v = 17_u32; let ptr: *const u32 = &v; let tag_mask = 0b11; let ptr_mask = !tag_mask; let tagged_ptr = ptr.map_addr(|a| a | 0b10); let tag = tagged_ptr.addr() & tag_mask; assert_eq!(tag, 0b10); let masked_ptr = tagged_ptr.mask(ptr_mask); assert_eq!(unsafe { * masked_ptr }, 17); }