diff --git a/src/librustc_codegen_llvm/llvm/diagnostic.rs b/src/librustc_codegen_llvm/llvm/diagnostic.rs index a8d272f157ce3..04e65ac423300 100644 --- a/src/librustc_codegen_llvm/llvm/diagnostic.rs +++ b/src/librustc_codegen_llvm/llvm/diagnostic.rs @@ -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> { @@ -107,7 +107,7 @@ impl InlineAsmDiagnostic<'ll> { InlineAsmDiagnostic { cookie, message: message.unwrap(), - instruction: instruction.unwrap(), + instruction, } } } diff --git a/src/test/ui/issues/issue-23458.rs b/src/test/ui/issues/issue-23458.rs new file mode 100644 index 0000000000000..90b3f1f9714b2 --- /dev/null +++ b/src/test/ui/issues/issue-23458.rs @@ -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 + } +} diff --git a/src/test/ui/issues/issue-23458.stderr b/src/test/ui/issues/issue-23458.stderr new file mode 100644 index 0000000000000..aff0f82af6fdc --- /dev/null +++ b/src/test/ui/issues/issue-23458.stderr @@ -0,0 +1,17 @@ +error: invalid operand in inline asm: 'int $3' + --> $DIR/issue-23458.rs:7:9 + | +LL | asm!("int $3"); + | ^^^^^^^^^^^^^^^ + +error: :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 +