]>
Commit | Line | Data |
---|---|---|
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 |
17 | mod 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 | ||
81 | fn main() {} |