File tree Expand file tree Collapse file tree 2 files changed +68
-0
lines changed Expand file tree Collapse file tree 2 files changed +68
-0
lines changed Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 1+ error[E0668]: malformed inline assembly
2+ --> $DIR/inline-asm-bad-constraint.rs:29:9
3+ |
4+ LL | asm!("" :"={rax"(rax)) //~ ERROR E0668
5+ | ^^^^^^^^^^^^^^^^^^^^^^
6+
7+ error[E0668]: malformed inline assembly
8+ --> $DIR/inline-asm-bad-constraint.rs:37:9
9+ |
10+ LL | asm!("callq $0" : : "0"(foo)) //~ ERROR E0668
11+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
12+
13+ error[E0668]: malformed inline assembly
14+ --> $DIR/inline-asm-bad-constraint.rs:44:9
15+ |
16+ LL | asm!("addb $1, $0" : "={rax}"((0i32, rax))); //~ ERROR E0668
17+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18+
19+ error: aborting due to 3 previous errors
20+
21+ For more information about this error, try `rustc --explain E0668`.
You can’t perform that action at this time.
0 commit comments