mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-11-04 06:56:14 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			38 lines
		
	
	
		
			852 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			852 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
//@ 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)
 | 
						|
}
 |