Add unit assignment to MIR for asm!()

This commit is contained in:
Fabian Wolff 2021-09-27 23:06:16 +02:00
parent a0648eab36
commit cd0873b502
3 changed files with 35 additions and 3 deletions
compiler/rustc_mir_build/src/build/expr
src/test/ui/asm

View file

@ -449,8 +449,11 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
})
.collect();
let destination = this.cfg.start_new_block();
if !options.contains(InlineAsmOptions::NORETURN) {
this.cfg.push_assign_unit(block, source_info, destination, this.tcx);
}
let destination_block = this.cfg.start_new_block();
this.cfg.terminate(
block,
source_info,
@ -462,11 +465,11 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
destination: if options.contains(InlineAsmOptions::NORETURN) {
None
} else {
Some(destination)
Some(destination_block)
},
},
);
destination.unit()
destination_block.unit()
}
// These cases don't actually need a destination

View file

@ -0,0 +1,14 @@
// Regression test for #89305, where a variable was erroneously reported
// as both unused and possibly-uninitialized.
// check-pass
#![feature(asm)]
#![warn(unused)]
fn main() {
unsafe {
let x: () = asm!("nop");
//~^ WARNING: unused variable: `x`
}
}

View file

@ -0,0 +1,15 @@
warning: unused variable: `x`
--> $DIR/issue-89305.rs:11:13
|
LL | let x: () = asm!("nop");
| ^ help: if this is intentional, prefix it with an underscore: `_x`
|
note: the lint level is defined here
--> $DIR/issue-89305.rs:7:9
|
LL | #![warn(unused)]
| ^^^^^^
= note: `#[warn(unused_variables)]` implied by `#[warn(unused)]`
warning: 1 warning emitted