diff options
| author | bors <bors@rust-lang.org> | 2024-08-19 06:23:49 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-08-19 06:23:49 +0000 |
| commit | e3f909b2bbd0b10db6f164d466db237c582d3045 (patch) | |
| tree | 35f38ab5390b874a6baf8282ad9d22f5f2c33cf7 /compiler/rustc_mir_transform/src/simplify.rs | |
| parent | 804be74e3c4ec3646b448dfdb7a0fc31237a5818 (diff) | |
| parent | 8a513f1720926799f4507c0bb8fb8d1b164ed459 (diff) | |
Auto merge of #129261 - tgross35:rollup-xjbvqx7, r=tgross35
Rollup of 7 pull requests Successful merges: - #127679 (Stabilize `raw_ref_op` (RFC 2582)) - #128084 (Suggest adding Result return type for associated method in E0277.) - #128628 (When deduplicating unreachable blocks, erase the source information.) - #128902 (doc: std::env::var: Returns None for names with '=' or NUL byte) - #129048 (Update `crosstool-ng` for loongarch64) - #129116 (Include a copy of `compiler-rt` source in the `download-ci-llvm` tarball) - #129208 (Fix order of normalization and recursion in const folding.) r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_mir_transform/src/simplify.rs')
| -rw-r--r-- | compiler/rustc_mir_transform/src/simplify.rs | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/compiler/rustc_mir_transform/src/simplify.rs b/compiler/rustc_mir_transform/src/simplify.rs index 5bbe3bb747f..4fe8cf6213f 100644 --- a/compiler/rustc_mir_transform/src/simplify.rs +++ b/compiler/rustc_mir_transform/src/simplify.rs @@ -31,6 +31,7 @@ use rustc_index::{Idx, IndexSlice, IndexVec}; use rustc_middle::mir::visit::{MutVisitor, MutatingUseContext, PlaceContext, Visitor}; use rustc_middle::mir::*; use rustc_middle::ty::TyCtxt; +use rustc_span::DUMMY_SP; use smallvec::SmallVec; pub enum SimplifyCfg { @@ -318,6 +319,7 @@ pub(crate) fn remove_dead_blocks(body: &mut Body<'_>) { let mut orig_index = 0; let mut used_index = 0; let mut kept_unreachable = None; + let mut deduplicated_unreachable = false; basic_blocks.raw.retain(|bbdata| { let orig_bb = BasicBlock::new(orig_index); if !reachable.contains(orig_bb) { @@ -330,6 +332,7 @@ pub(crate) fn remove_dead_blocks(body: &mut Body<'_>) { let kept_unreachable = *kept_unreachable.get_or_insert(used_bb); if kept_unreachable != used_bb { replacements[orig_index] = kept_unreachable; + deduplicated_unreachable = true; orig_index += 1; return false; } @@ -341,6 +344,14 @@ pub(crate) fn remove_dead_blocks(body: &mut Body<'_>) { true }); + // If we deduplicated unreachable blocks we erase their source_info as we + // can no longer attribute their code to a particular location in the + // source. + if deduplicated_unreachable { + basic_blocks[kept_unreachable.unwrap()].terminator_mut().source_info = + SourceInfo { span: DUMMY_SP, scope: OUTERMOST_SOURCE_SCOPE }; + } + for block in basic_blocks { for target in block.terminator_mut().successors_mut() { *target = replacements[target.index()]; |
