| //@ assembly-output: emit-asm |
| //@ compile-flags: -Copt-level=1 |
| //@ only-x86_64 |
| //@ ignore-sgx |
| #![crate_type = "rlib"] |
| |
| // CHECK-LABEL: old_style |
| // CHECK: movq %{{.*}}, %rax |
| // CHECK: orq $1, %rax |
| // CHECK: retq |
| #[no_mangle] |
| pub fn old_style(a: *mut u8) -> *mut u8 { |
| (a as usize | 1) as *mut u8 |
| } |
| |
| // CHECK-LABEL: cheri_compat |
| // CHECK: movq %{{.*}}, %rax |
| // CHECK: orq $1, %rax |
| // CHECK: retq |
| #[no_mangle] |
| pub fn cheri_compat(a: *mut u8) -> *mut u8 { |
| let old = a as usize; |
| let new = old | 1; |
| let diff = new.wrapping_sub(old); |
| a.wrapping_add(diff) |
| } |
| |
| // CHECK-LABEL: definitely_not_a_null_pointer |
| // CHECK: movq %{{.*}}, %rax |
| // CHECK: orq $1, %rax |
| // CHECK: retq |
| #[no_mangle] |
| pub fn definitely_not_a_null_pointer(a: *mut u8) -> *mut u8 { |
| let old = a as usize; |
| let new = old | 1; |
| a.wrapping_sub(old).wrapping_add(new) |
| } |