]> git.lizzy.rs Git - rust.git/blob - src/test/ui/liveness/liveness-asm.rs
Auto merge of #93718 - thomcc:used-macho, r=pnkfelix
[rust.git] / src / test / ui / liveness / liveness-asm.rs
1 // Ensure inout asm! operands are marked as used by the liveness pass
2
3 // only-x86_64
4 // check-pass
5
6 #![allow(dead_code)]
7 #![warn(unused_assignments)]
8 #![warn(unused_variables)]
9
10 use std::arch::asm;
11
12 // Test the single inout case
13 unsafe fn f1(mut src: *const u8) {
14     asm!("/*{0}*/", inout(reg) src); //~ WARN value assigned to `src` is never read
15 }
16
17 unsafe fn f2(mut src: *const u8) -> *const u8 {
18     asm!("/*{0}*/", inout(reg) src);
19     src
20 }
21
22 // Test the split inout case
23 unsafe fn f3(mut src: *const u8) {
24     asm!("/*{0}*/", inout(reg) src => src); //~ WARN value assigned to `src` is never read
25 }
26
27 unsafe fn f4(mut src: *const u8) -> *const u8 {
28     asm!("/*{0}*/", inout(reg) src => src);
29     src
30 }
31
32 // Tests the use of field projections
33 struct S {
34     field: *mut u8,
35 }
36
37 unsafe fn f5(src: &mut S) {
38     asm!("/*{0}*/", inout(reg) src.field);
39 }
40
41 unsafe fn f6(src: &mut S) {
42     asm!("/*{0}*/", inout(reg) src.field => src.field);
43 }
44
45 fn main() {}