]> git.lizzy.rs Git - rust.git/blob - src/test/ui/liveness/liveness-asm.rs
Rollup merge of #87440 - twetzel59:fix-barrier-no-op, r=yaahc
[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 #![feature(asm)]
7 #![allow(dead_code)]
8 #![warn(unused_assignments)]
9 #![warn(unused_variables)]
10
11 // Test the single inout case
12 unsafe fn f1(mut src: *const u8) {
13     asm!("/*{0}*/", inout(reg) src); //~ WARN value assigned to `src` is never read
14 }
15
16 unsafe fn f2(mut src: *const u8) -> *const u8 {
17     asm!("/*{0}*/", inout(reg) src);
18     src
19 }
20
21 // Test the split inout case
22 unsafe fn f3(mut src: *const u8) {
23     asm!("/*{0}*/", inout(reg) src => src); //~ WARN value assigned to `src` is never read
24 }
25
26 unsafe fn f4(mut src: *const u8) -> *const u8 {
27     asm!("/*{0}*/", inout(reg) src => src);
28     src
29 }
30
31 // Tests the use of field projections
32 struct S {
33     field: *mut u8,
34 }
35
36 unsafe fn f5(src: &mut S) {
37     asm!("/*{0}*/", inout(reg) src.field);
38 }
39
40 unsafe fn f6(src: &mut S) {
41     asm!("/*{0}*/", inout(reg) src.field => src.field);
42 }
43
44 fn main() {}