#![allow(dead_code, deprecated, unused_variables, unused_mut)] use core::sync::atomic::{AtomicPtr, Ordering}; fn main() { let pointer = &mut 3i64 as *mut i64; let atom = AtomicPtr::::new(pointer.map_addr(|a| a | 1)); assert_eq!(atom.fetch_or(1, Ordering::Relaxed).addr() & 1, 1); let untagged = atom.fetch_and(!1, Ordering::Relaxed).map_addr(|a| a & !1); assert_eq!(untagged, pointer); }