File tree 2 files changed +68
-0
lines changed
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