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