Skip to content

Commit

Permalink
Rollup merge of rust-lang#69836 - JohnTitor:immediate-outputs, r=nagisa
Browse files Browse the repository at this point in the history
Check if output is immediate value

Fixes rust-lang#62046

r? @nagisa
  • Loading branch information
Centril authored Mar 9, 2020
2 parents e3f040f + d32924f commit da9d266
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 2 deletions.
10 changes: 8 additions & 2 deletions src/librustc_codegen_llvm/asm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,17 @@ impl AsmBuilderMethods<'tcx> for Builder<'a, 'll, 'tcx> {
let mut indirect_outputs = vec![];
for (i, (out, &place)) in ia.outputs.iter().zip(&outputs).enumerate() {
if out.is_rw {
inputs.push(self.load_operand(place).immediate());
let operand = self.load_operand(place);
if let OperandValue::Immediate(_) = operand.val {
inputs.push(operand.immediate());
}
ext_constraints.push(i.to_string());
}
if out.is_indirect {
indirect_outputs.push(self.load_operand(place).immediate());
let operand = self.load_operand(place);
if let OperandValue::Immediate(_) = operand.val {
indirect_outputs.push(operand.immediate());
}
} else {
output_types.push(place.layout.llvm_type(self.cx()));
}
Expand Down
11 changes: 11 additions & 0 deletions src/test/ui/asm/issue-62046.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// build-fail
// ignore-emscripten no asm! support

#![feature(asm)]

fn main() {
unsafe {
asm!("nop" : "+r"("r15"));
//~^ malformed inline assembly
}
}
11 changes: 11 additions & 0 deletions src/test/ui/asm/issue-62046.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
error[E0668]: malformed inline assembly
--> $DIR/issue-62046.rs:8:9
|
LL | asm!("nop" : "+r"("r15"));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)

error: aborting due to previous error

For more information about this error, try `rustc --explain E0668`.

0 comments on commit da9d266

Please sign in to comment.