Rollup merge of #116239 - cjgillot:issue-116212, r=WaffleLapkin

Only visit reachable nodes in SsaLocals.

Fixes https://github.com/rust-lang/rust/issues/116212
This commit is contained in:
Matthias Krüger 2023-09-29 10:11:14 +02:00 committed by GitHub
commit 4f09f80bcf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 8 deletions

View File

@ -78,15 +78,11 @@ impl SsaLocals {
visitor.assignments[local] = Set1::One(LocationExtended::Arg);
}
if body.basic_blocks.len() > 2 {
// For SSA assignments, a RPO visit will see the assignment before it sees any use.
// We only visit reachable nodes: computing `dominates` on an unreachable node ICEs.
for (bb, data) in traversal::reverse_postorder(body) {
visitor.visit_basic_block_data(bb, data);
}
} else {
for (bb, data) in body.basic_blocks.iter_enumerated() {
visitor.visit_basic_block_data(bb, data);
}
}
for var_debug_info in &body.var_debug_info {
visitor.visit_var_debug_info(var_debug_info);

View File

@ -0,0 +1,14 @@
// Regression test for issue #116212.
#![feature(never_type)]
use std::mem::MaybeUninit;
struct Foo {
x: u8,
y: !,
}
fn main() {
let foo = unsafe { MaybeUninit::<Foo>::uninit().assume_init() };
}