]>
Commit | Line | Data |
---|---|---|
0bf4aa26 XL |
1 | // Test that the compiler will catch invalid inline assembly constraints. |
2 | ||
46de9a89 | 3 | // build-fail |
a1dfa0c6 XL |
4 | // ignore-emscripten |
5 | ||
72b1a166 | 6 | #![feature(llvm_asm)] |
0bf4aa26 XL |
7 | |
8 | extern "C" { | |
9 | fn foo(a: usize); | |
10 | } | |
11 | ||
12 | fn main() { | |
13 | bad_register_constraint(); | |
14 | bad_input(); | |
15 | wrong_size_output(); | |
16 | } | |
17 | ||
18 | // Issue #54130 | |
19 | fn bad_register_constraint() { | |
20 | let rax: u64; | |
21 | unsafe { | |
72b1a166 | 22 | llvm_asm!("" :"={rax"(rax)) //~ ERROR E0668 |
0bf4aa26 XL |
23 | }; |
24 | println!("Accumulator is: {}", rax); | |
25 | } | |
26 | ||
27 | // Issue #54376 | |
28 | fn bad_input() { | |
29 | unsafe { | |
72b1a166 | 30 | llvm_asm!("callq $0" : : "0"(foo)) //~ ERROR E0668 |
0bf4aa26 XL |
31 | }; |
32 | } | |
33 | ||
34 | fn wrong_size_output() { | |
35 | let rax: u64 = 0; | |
36 | unsafe { | |
72b1a166 | 37 | llvm_asm!("addb $1, $0" : "={rax}"((0i32, rax))); //~ ERROR E0668 |
0bf4aa26 XL |
38 | } |
39 | println!("rax: {}", rax); | |
40 | } |