Skip to content

Commit 0991d20

Browse files
committed
fixup! codegen_llvm: check inline assembly constraints with LLVM
1 parent ecd51ed commit 0991d20

File tree

2 files changed

+68
-0
lines changed

2 files changed

+68
-0
lines changed

Diff for: src/test/ui/inline-asm-bad-constraint.rs

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
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+
}

Diff for: src/test/ui/inline-asm-bad-constraint.stderr

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
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`.

0 commit comments

Comments
 (0)