]> git.proxmox.com Git - rustc.git/blame - src/test/ui/borrowck/borrowck-asm.rs
New upstream version 1.44.1+dfsg1
[rustc.git] / src / test / ui / borrowck / borrowck-asm.rs
CommitLineData
ff7c6d11
XL
1// ignore-s390x
2// ignore-emscripten
3// ignore-powerpc
94b46f34
XL
4// ignore-powerpc64
5// ignore-powerpc64le
ff7c6d11 6// ignore-sparc
94b46f34 7// ignore-sparc64
ff7c6d11 8
ba9703b0 9#![feature(llvm_asm)]
ff7c6d11
XL
10
11#[cfg(any(target_arch = "x86",
12 target_arch = "x86_64",
13 target_arch = "arm",
0531ce1d
XL
14 target_arch = "aarch64",
15 target_arch = "mips",
16 target_arch = "mips64"))]
ff7c6d11
XL
17mod test_cases {
18 fn is_move() {
19 let y: &mut isize;
20 let x = &mut 0isize;
21 unsafe {
ba9703b0 22 llvm_asm!("nop" : : "r"(x));
ff7c6d11 23 }
48663c56 24 let z = x; //~ ERROR use of moved value: `x`
ff7c6d11
XL
25 }
26
27 fn in_is_read() {
28 let mut x = 3;
29 let y = &mut x;
30 unsafe {
ba9703b0 31 llvm_asm!("nop" : : "r"(x)); //~ ERROR cannot use
ff7c6d11
XL
32 }
33 let z = y;
34 }
35
36 fn out_is_assign() {
37 let x = 3;
38 unsafe {
ba9703b0 39 llvm_asm!("nop" : "=r"(x)); //~ ERROR cannot assign twice
ff7c6d11
XL
40 }
41 let mut a = &mut 3;
42 let b = &*a;
43 unsafe {
ba9703b0 44 llvm_asm!("nop" : "=r"(a)); // OK, Shallow write to `a`
ff7c6d11
XL
45 }
46 let c = b;
47 let d = *a;
48 }
49
50 fn rw_is_assign() {
51 let x = 3;
52 unsafe {
ba9703b0 53 llvm_asm!("nop" : "+r"(x)); //~ ERROR cannot assign twice
ff7c6d11
XL
54 }
55 }
56
57 fn indirect_is_not_init() {
58 let x: i32;
59 unsafe {
ba9703b0 60 llvm_asm!("nop" : "=*r"(x)); //~ ERROR use of possibly-uninitialized variable
ff7c6d11
XL
61 }
62 }
63
64 fn rw_is_read() {
65 let mut x = &mut 3;
66 let y = &*x;
67 unsafe {
ba9703b0 68 llvm_asm!("nop" : "+r"(x)); //~ ERROR cannot assign to `x` because it is borrowed
ff7c6d11
XL
69 }
70 let z = y;
71 }
72
73 fn two_moves() {
74 let x = &mut 2;
75 unsafe {
ba9703b0 76 llvm_asm!("nop" : : "r"(x), "r"(x) ); //~ ERROR use of moved value
ff7c6d11
XL
77 }
78 }
79}
80
81fn main() {}