#![allow(dead_code, deprecated, unused_variables, unused_mut)] #![feature(ptr_mask)] fn main() { let mut v = 17_u32; let ptr: *mut u32 = &mut 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); unsafe { *masked_ptr = 0 }; assert_eq!(v, 0); }