diff options
| author | Andy Russell <arussell123@gmail.com> | 2018-10-18 20:34:01 -0400 |
|---|---|---|
| committer | Andy Russell <arussell123@gmail.com> | 2019-03-24 12:21:03 -0400 |
| commit | 4728433c9ec07814b15868cb092afa2d60963cee (patch) | |
| tree | e4dd8d429e8a55efe5eee897d9a1611edd2e1187 | |
| parent | 0633c55d2030969d91b57142b8582c53101e6339 (diff) | |
| download | rust-4728433c9ec07814b15868cb092afa2d60963cee.tar.gz rust-4728433c9ec07814b15868cb092afa2d60963cee.zip | |
make asm diagnostic instruction optional
`DiagnosticInfoInlineAsm::getInstruction` may return a null pointer, so the instruction shouldn't be blindly unwrapped.
| -rw-r--r-- | src/librustc_codegen_llvm/llvm/diagnostic.rs | 4 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-23458.rs | 10 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-23458.stderr | 17 |
3 files changed, 29 insertions, 2 deletions
diff --git a/src/librustc_codegen_llvm/llvm/diagnostic.rs b/src/librustc_codegen_llvm/llvm/diagnostic.rs index a8d272f157c..04e65ac4233 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 00000000000..90b3f1f9714 --- /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 00000000000..aff0f82af6f --- /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: <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 + |
