Rollup merge of #69836 - JohnTitor:immediate-outputs, r=nagisa
Check if output is immediate value Fixes #62046 r? @nagisa
This commit is contained in:
commit
436f2ec58c
3 changed files with 30 additions and 2 deletions
|
|
@ -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()));
|
||||
}
|
||||
|
|
|
|||
11
src/test/ui/asm/issue-62046.rs
Normal file
11
src/test/ui/asm/issue-62046.rs
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
// build-fail
|
||||
// ignore-emscripten no asm! support
|
||||
|
||||
#![feature(asm)]
|
||||
|
||||
fn main() {
|
||||
unsafe {
|
||||
asm!("nop" : "+r"("r15"));
|
||||
//~^ malformed inline assembly
|
||||
}
|
||||
}
|
||||
11
src/test/ui/asm/issue-62046.stderr
Normal file
11
src/test/ui/asm/issue-62046.stderr
Normal file
|
|
@ -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`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue