Skip to content

Commit

Permalink
Auto merge of #59242 - euclio:asm-ice, r=nagisa
Browse files Browse the repository at this point in the history
make asm diagnostic instruction optional

`DiagnosticInfoInlineAsm::getInstruction` may return a null pointer, so
the instruction shouldn't be blindly unwrapped.

Reopening from #55193. I was unable to trigger the assertion on Windows after rebasing.

Fixes #23458.
Fixes #55216.
  • Loading branch information
bors committed Mar 25, 2019
2 parents 60eca54 + 4728433 commit 3f36ac4
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/librustc_codegen_llvm/llvm/diagnostic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ impl OptimizationDiagnostic<'ll> {
pub struct InlineAsmDiagnostic<'ll> {
pub cookie: c_uint,
pub message: &'ll Twine,
pub instruction: &'ll Value,
pub instruction: Option<&'ll Value>,
}

impl InlineAsmDiagnostic<'ll> {
Expand All @@ -107,7 +107,7 @@ impl InlineAsmDiagnostic<'ll> {
InlineAsmDiagnostic {
cookie,
message: message.unwrap(),
instruction: instruction.unwrap(),
instruction,
}
}
}
Expand Down
10 changes: 10 additions & 0 deletions src/test/ui/issues/issue-23458.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#![feature(asm)]

// only-x86_64

fn main() {
unsafe {
asm!("int $3"); //~ ERROR too few operands for instruction
//~| ERROR invalid operand in inline asm
}
}
17 changes: 17 additions & 0 deletions src/test/ui/issues/issue-23458.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
error: invalid operand in inline asm: 'int $3'
--> $DIR/issue-23458.rs:7:9
|
LL | asm!("int $3");
| ^^^^^^^^^^^^^^^

error: <inline asm>:1:2: error: too few operands for instruction
int
^

--> $DIR/issue-23458.rs:7:9
|
LL | asm!("int $3");
| ^^^^^^^^^^^^^^^

error: aborting due to 2 previous errors

0 comments on commit 3f36ac4

Please sign in to comment.