about summary refs log tree commit diff
path: root/src/tools/miri/tests/pass/shims/ptr_mask.rs
blob: 6872ba577d25103833a21e79ae8452c501acfcee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#![feature(ptr_mask)]

fn main() {
    let v: u32 = 0xABCDABCD;
    let ptr: *const u32 = &v;

    // u32 is 4 aligned,
    // so the lower `log2(4) = 2` bits of the address are always 0
    assert_eq!(ptr.addr() & 0b11, 0);

    let tagged_ptr = ptr.map_addr(|a| a | 0b11);
    let tag = tagged_ptr.addr() & 0b11;
    let masked_ptr = tagged_ptr.mask(!0b11);

    assert_eq!(tag, 0b11);
    assert_eq!(unsafe { *masked_ptr }, 0xABCDABCD);
}