summary refs log tree commit diff
path: root/src/librustc_codegen_llvm
diff options
context:
space:
mode:
authorLevente Kurusa <lkurusa@acm.org>2018-10-15 00:00:53 +0200
committerLevente Kurusa <lkurusa@acm.org>2018-10-17 07:40:44 +0200
commit4d7f08b1702840a4d8ade9cd9e9f83743e3241fd (patch)
tree0d806e1cba57888518f95bcac5903bb328bf8f31 /src/librustc_codegen_llvm
parent567557f630693d47fd21151ff1fdbc430e330a13 (diff)
downloadrust-4d7f08b1702840a4d8ade9cd9e9f83743e3241fd.tar.gz
rust-4d7f08b1702840a4d8ade9cd9e9f83743e3241fd.zip
rustc: improve E0669 span
E0669 refers to a constraint that cannot be coerced into a single LLVM
value, unfortunately right now this uses the Span for the entire inline
assembly statement, which is less than ideal.

This commit preserves the Span from HIR, which lets us emit the error
using the Span for the operand itself in MIR.

Signed-off-by: Levente Kurusa <lkurusa@acm.org>
Diffstat (limited to 'src/librustc_codegen_llvm')
-rw-r--r--src/librustc_codegen_llvm/mir/statement.rs8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/librustc_codegen_llvm/mir/statement.rs b/src/librustc_codegen_llvm/mir/statement.rs
index 93be0074f6e..2a873fb4cbb 100644
--- a/src/librustc_codegen_llvm/mir/statement.rs
+++ b/src/librustc_codegen_llvm/mir/statement.rs
@@ -84,18 +84,18 @@ impl FunctionCx<'a, 'll, 'tcx> {
                 }).collect();
 
                 let input_vals = inputs.iter()
-                    .try_fold(Vec::with_capacity(inputs.len()), |mut acc, input| {
+                    .try_fold(Vec::with_capacity(inputs.len()), |mut acc, (span, input)| {
                         let op = self.codegen_operand(&bx, input);
                         if let OperandValue::Immediate(_) = op.val {
                             acc.push(op.immediate());
                             Ok(acc)
                         } else {
-                            Err(op)
+                            Err(span)
                         }
                 });
 
-                if input_vals.is_err() {
-                   span_err!(bx.sess(), statement.source_info.span, E0669,
+                if let Err(span) = input_vals {
+                    span_err!(bx.sess(), span.to_owned(), E0669,
                              "invalid value for constraint in inline assembly");
                 } else {
                     let input_vals = input_vals.unwrap();