]> git.lizzy.rs Git - rust.git/blob - src/test/ui/inline-asm-bad-constraint.rs
Rollup merge of #54648 - alexcrichton:update-cargo, r=nikomatsakis
[rust.git] / src / test / ui / inline-asm-bad-constraint.rs
1 // Copyright 2018 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 // Test that the compiler will catch invalid inline assembly constraints.
12
13 #![feature(asm)]
14
15 extern "C" {
16     fn foo(a: usize);
17 }
18
19 fn main() {
20     bad_register_constraint();
21     bad_input();
22     wrong_size_output();
23 }
24
25 // Issue #54130
26 fn bad_register_constraint() {
27     let rax: u64;
28     unsafe {
29         asm!("" :"={rax"(rax)) //~ ERROR E0668
30     };
31     println!("Accumulator is: {}", rax);
32 }
33
34 // Issue #54376
35 fn bad_input() {
36     unsafe {
37         asm!("callq $0" : : "0"(foo)) //~ ERROR E0668
38     };
39 }
40
41 fn wrong_size_output() {
42     let rax: u64 = 0;
43     unsafe {
44         asm!("addb $1, $0" : "={rax}"((0i32, rax))); //~ ERROR E0668
45     }
46     println!("rax: {}", rax);
47 }