rust/tests/ui/liveness/liveness-asm.rs

46 lines
957 B
Rust

// Ensure inout asm! operands are marked as used by the liveness pass
//@ only-x86_64
//@ check-pass
#![allow(dead_code)]
#![warn(unused_assignments)]
#![warn(unused_variables)]
use std::arch::asm;
// Test the single inout case
unsafe fn f1(mut src: *const u8) {
asm!("/*{0}*/", inout(reg) src); //~ WARN value assigned to `src` is never read
}
unsafe fn f2(mut src: *const u8) -> *const u8 {
asm!("/*{0}*/", inout(reg) src);
src
}
// Test the split inout case
unsafe fn f3(mut src: *const u8) {
asm!("/*{0}*/", inout(reg) src => src); //~ WARN value assigned to `src` is never read
}
unsafe fn f4(mut src: *const u8) -> *const u8 {
asm!("/*{0}*/", inout(reg) src => src);
src
}
// Tests the use of field projections
struct S {
field: *mut u8,
}
unsafe fn f5(src: &mut S) {
asm!("/*{0}*/", inout(reg) src.field);
}
unsafe fn f6(src: &mut S) {
asm!("/*{0}*/", inout(reg) src.field => src.field);
}
fn main() {}