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()13fn main() { 14 bad_register_constraint(); 15 bad_input(); 16 wrong_size_output(); 17 } 18 19 // Issue #54130 bad_register_constraint()20fn 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()29fn bad_input() { 30 unsafe { 31 llvm_asm!("callq $0" : : "0"(foo)) //~ ERROR E0668 32 }; 33 } 34 wrong_size_output()35fn 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