diff --git a/compiler/rustc_mir/src/transform/coverage/debug.rs b/compiler/rustc_mir/src/transform/coverage/debug.rs index 0cd2e413da9..7eb2d33453c 100644 --- a/compiler/rustc_mir/src/transform/coverage/debug.rs +++ b/compiler/rustc_mir/src/transform/coverage/debug.rs @@ -1,4 +1,4 @@ -use super::graph::BasicCoverageBlocks; +use super::graph::CoverageGraph; use super::spans::CoverageSpan; use crate::util::pretty; @@ -11,7 +11,7 @@ use rustc_middle::ty::TyCtxt; pub(crate) fn dump_coverage_spanview( tcx: TyCtxt<'tcx>, mir_body: &mir::Body<'tcx>, - basic_coverage_blocks: &BasicCoverageBlocks, + basic_coverage_blocks: &CoverageGraph, pass_name: &str, coverage_spans: &Vec, ) { @@ -28,20 +28,20 @@ pub(crate) fn dump_coverage_spanview( .expect("Unexpected IO error dumping coverage spans as HTML"); } -/// Converts the computed `BasicCoverageBlock`s into `SpanViewable`s. +/// Converts the computed `BasicCoverageBlockData`s into `SpanViewable`s. fn span_viewables( tcx: TyCtxt<'tcx>, mir_body: &mir::Body<'tcx>, - basic_coverage_blocks: &BasicCoverageBlocks, + basic_coverage_blocks: &CoverageGraph, coverage_spans: &Vec, ) -> Vec { let mut span_viewables = Vec::new(); for coverage_span in coverage_spans { let tooltip = coverage_span.format_coverage_statements(tcx, mir_body); - let CoverageSpan { span, bcb_leader_bb: bb, .. } = coverage_span; - let bcb = &basic_coverage_blocks[*bb]; - let id = bcb.id(); - let leader_bb = bcb.leader_bb(); + let CoverageSpan { span, bcb, .. } = coverage_span; + let bcb_data = &basic_coverage_blocks[*bcb]; + let id = bcb_data.id(); + let leader_bb = bcb_data.leader_bb(); span_viewables.push(SpanViewable { bb: leader_bb, span: *span, id, tooltip }); } span_viewables diff --git a/compiler/rustc_mir/src/transform/coverage/graph.rs b/compiler/rustc_mir/src/transform/coverage/graph.rs index c0a698833a1..3d3e76f907b 100644 --- a/compiler/rustc_mir/src/transform/coverage/graph.rs +++ b/compiler/rustc_mir/src/transform/coverage/graph.rs @@ -1,152 +1,100 @@ +use rustc_data_structures::graph::dominators::{self, Dominators}; +use rustc_data_structures::graph::{self, GraphSuccessors, WithNumNodes}; use rustc_index::bit_set::BitSet; use rustc_index::vec::IndexVec; -use rustc_middle::mir::{self, BasicBlock, BasicBlockData, TerminatorKind}; +use rustc_middle::mir::{self, BasicBlock, BasicBlockData, Terminator, TerminatorKind}; + +use std::ops::{Index, IndexMut}; const ID_SEPARATOR: &str = ","; -/// A BasicCoverageBlock (BCB) represents the maximal-length sequence of CFG (MIR) BasicBlocks -/// without conditional branches. -/// -/// The BCB allows coverage analysis to be performed on a simplified projection of the underlying -/// MIR CFG, without altering the original CFG. Note that running the MIR `SimplifyCfg` transform, -/// is not sufficient, and therefore not necessary, since the BCB-based CFG projection is a more -/// aggressive simplification. For example: -/// -/// * The BCB CFG projection ignores (trims) branches not relevant to coverage, such as unwind- -/// related code that is injected by the Rust compiler but has no physical source code to -/// count. This also means a BasicBlock with a `Call` terminator can be merged into its -/// primary successor target block, in the same BCB. -/// * Some BasicBlock terminators support Rust-specific concerns--like borrow-checking--that are -/// not relevant to coverage analysis. `FalseUnwind`, for example, can be treated the same as -/// a `Goto`, and merged with its successor into the same BCB. -/// -/// Each BCB with at least one computed `CoverageSpan` will have no more than one `Counter`. -/// In some cases, a BCB's execution count can be computed by `CounterExpression`. Additional -/// disjoint `CoverageSpan`s in a BCB can also be counted by `CounterExpression` (by adding `ZERO` -/// to the BCB's primary counter or expression). -/// -/// Dominator/dominated relationships (which are fundamental to the coverage analysis algorithm) -/// between two BCBs can be computed using the `mir::Body` `dominators()` with any `BasicBlock` -/// member of each BCB. (For consistency, BCB's use the first `BasicBlock`, also referred to as the -/// `bcb_leader_bb`.) -/// -/// The BCB CFG projection is critical to simplifying the coverage analysis by ensuring graph -/// path-based queries (`is_dominated_by()`, `predecessors`, `successors`, etc.) have branch -/// (control flow) significance. -#[derive(Debug, Clone)] -pub(crate) struct BasicCoverageBlock { - pub blocks: Vec, +/// A coverage-specific simplification of the MIR control flow graph (CFG). The `CoverageGraph`s +/// nodes are `BasicCoverageBlock`s, which encompass one or more MIR `BasicBlock`s, plus a +/// `CoverageKind` counter (to be added by `CoverageCounters::make_bcb_counters`), and an optional +/// set of additional counters--if needed--to count incoming edges, if there are more than one. +/// (These "edge counters" are eventually converted into new MIR `BasicBlock`s.) +pub(crate) struct CoverageGraph { + bcbs: IndexVec, + bb_to_bcb: IndexVec>, + pub successors: IndexVec>, + pub predecessors: IndexVec>, + dominators: Option>, } -impl BasicCoverageBlock { - pub fn leader_bb(&self) -> BasicBlock { - self.blocks[0] - } - - pub fn id(&self) -> String { - format!( - "@{}", - self.blocks - .iter() - .map(|bb| bb.index().to_string()) - .collect::>() - .join(ID_SEPARATOR) - ) - } -} - -pub(crate) struct BasicCoverageBlocks { - vec: IndexVec>, -} - -impl BasicCoverageBlocks { +impl CoverageGraph { pub fn from_mir(mir_body: &mir::Body<'tcx>) -> Self { + let (bcbs, bb_to_bcb) = Self::compute_basic_coverage_blocks(mir_body); + + // Pre-transform MIR `BasicBlock` successors and predecessors into the BasicCoverageBlock + // equivalents. Note that since the BasicCoverageBlock graph has been fully simplified, the + // each predecessor of a BCB leader_bb should be in a unique BCB, and each successor of a + // BCB last_bb should bin in its own unique BCB. Therefore, collecting the BCBs using + // `bb_to_bcb` should work without requiring a deduplication step. + + let successors = IndexVec::from_fn_n( + |bcb| { + let bcb_data = &bcbs[bcb]; + let bcb_successors = + bcb_filtered_successors(&mir_body, &bcb_data.terminator(mir_body).kind) + .filter_map(|&successor_bb| bb_to_bcb[successor_bb]) + .collect::>(); + debug_assert!({ + let mut sorted = bcb_successors.clone(); + sorted.sort_unstable(); + let initial_len = sorted.len(); + sorted.dedup(); + sorted.len() == initial_len + }); + bcb_successors + }, + bcbs.len(), + ); + + let mut predecessors = IndexVec::from_elem_n(Vec::new(), bcbs.len()); + for (bcb, bcb_successors) in successors.iter_enumerated() { + for &successor in bcb_successors { + predecessors[successor].push(bcb); + } + } + let mut basic_coverage_blocks = - BasicCoverageBlocks { vec: IndexVec::from_elem_n(None, mir_body.basic_blocks().len()) }; - basic_coverage_blocks.extract_from_mir(mir_body); + Self { bcbs, bb_to_bcb, successors, predecessors, dominators: None }; + let dominators = dominators::dominators(&basic_coverage_blocks); + basic_coverage_blocks.dominators = Some(dominators); basic_coverage_blocks } - pub fn iter(&self) -> impl Iterator { - self.vec.iter().filter_map(|bcb| bcb.as_ref()) - } + fn compute_basic_coverage_blocks( + mir_body: &mir::Body<'tcx>, + ) -> ( + IndexVec, + IndexVec>, + ) { + let num_basic_blocks = mir_body.num_nodes(); + let mut bcbs = IndexVec::with_capacity(num_basic_blocks); + let mut bb_to_bcb = IndexVec::from_elem_n(None, num_basic_blocks); - pub fn num_nodes(&self) -> usize { - self.vec.len() - } - - pub fn extract_from_mir(&mut self, mir_body: &mir::Body<'tcx>) { - // Traverse the CFG but ignore anything following an `unwind` - let cfg_without_unwind = ShortCircuitPreorder::new(&mir_body, |term_kind| { - let mut successors = term_kind.successors(); - match &term_kind { - // SwitchInt successors are never unwind, and all of them should be traversed. - - // NOTE: TerminatorKind::FalseEdge targets from SwitchInt don't appear to be - // helpful in identifying unreachable code. I did test the theory, but the following - // changes were not beneficial. (I assumed that replacing some constants with - // non-deterministic variables might effect which blocks were targeted by a - // `FalseEdge` `imaginary_target`. It did not.) - // - // Also note that, if there is a way to identify BasicBlocks that are part of the - // MIR CFG, but not actually reachable, here are some other things to consider: - // - // Injecting unreachable code regions will probably require computing the set - // difference between the basic blocks found without filtering out unreachable - // blocks, and the basic blocks found with the filter; then computing the - // `CoverageSpans` without the filter; and then injecting `Counter`s or - // `CounterExpression`s for blocks that are not unreachable, or injecting - // `Unreachable` code regions otherwise. This seems straightforward, but not - // trivial. - // - // Alternatively, we might instead want to leave the unreachable blocks in - // (bypass the filter here), and inject the counters. This will result in counter - // values of zero (0) for unreachable code (and, notably, the code will be displayed - // with a red background by `llvm-cov show`). - // - // TerminatorKind::SwitchInt { .. } => { - // let some_imaginary_target = successors.clone().find_map(|&successor| { - // let term = mir_body.basic_blocks()[successor].terminator(); - // if let TerminatorKind::FalseEdge { imaginary_target, .. } = term.kind { - // if mir_body.predecessors()[imaginary_target].len() == 1 { - // return Some(imaginary_target); - // } - // } - // None - // }); - // if let Some(imaginary_target) = some_imaginary_target { - // box successors.filter(move |&&successor| successor != imaginary_target) - // } else { - // box successors - // } - // } - // - // Note this also required changing the closure signature for the - // `ShortCurcuitPreorder` to: - // - // F: Fn(&'tcx TerminatorKind<'tcx>) -> Box + 'a>, - TerminatorKind::SwitchInt { .. } => successors, - - // For all other kinds, return only the first successor, if any, and ignore unwinds - _ => successors.next().into_iter().chain(&[]), - } - }); - - // Walk the CFG using a Preorder traversal, which starts from `START_BLOCK` and follows + // Walk the MIR CFG using a Preorder traversal, which starts from `START_BLOCK` and follows // each block terminator's `successors()`. Coverage spans must map to actual source code, - // so compiler generated blocks and paths can be ignored. To that end the CFG traversal + // so compiler generated blocks and paths can be ignored. To that end, the CFG traversal // intentionally omits unwind paths. - let mut blocks = Vec::new(); - for (bb, data) in cfg_without_unwind { - if let Some(last) = blocks.last() { + let mir_cfg_without_unwind = ShortCircuitPreorder::new(&mir_body, bcb_filtered_successors); + + let mut basic_blocks = Vec::new(); + for (bb, data) in mir_cfg_without_unwind { + if let Some(last) = basic_blocks.last() { let predecessors = &mir_body.predecessors()[bb]; if predecessors.len() > 1 || !predecessors.contains(last) { // The `bb` has more than one _incoming_ edge, and should start its own - // `BasicCoverageBlock`. (Note, the `blocks` vector does not yet include `bb`; - // it contains a sequence of one or more sequential blocks with no intermediate - // branches in or out. Save these as a new `BasicCoverageBlock` before starting - // the new one.) - self.add_basic_coverage_block(blocks.split_off(0)); + // `BasicCoverageBlockData`. (Note, the `basic_blocks` vector does not yet + // include `bb`; it contains a sequence of one or more sequential basic_blocks + // with no intermediate branches in or out. Save these as a new + // `BasicCoverageBlockData` before starting the new one.) + Self::add_basic_coverage_block( + &mut bcbs, + &mut bb_to_bcb, + basic_blocks.split_off(0), + ); debug!( " because {}", if predecessors.len() > 1 { @@ -157,27 +105,40 @@ impl BasicCoverageBlocks { ); } } - blocks.push(bb); + basic_blocks.push(bb); let term = data.terminator(); match term.kind { TerminatorKind::Return { .. } + // FIXME(richkadel): Add test(s) for `Abort` coverage. | TerminatorKind::Abort + // FIXME(richkadel): Add test(s) for `Assert` coverage. + // Should `Assert` be handled like `FalseUnwind` instead? Since we filter out unwind + // branches when creating the BCB CFG, aren't `Assert`s (without unwinds) just like + // `FalseUnwinds` (which are kind of like `Goto`s)? | TerminatorKind::Assert { .. } + // FIXME(richkadel): Add test(s) for `Yield` coverage, and confirm coverage is + // sensible for code using the `yield` keyword. | TerminatorKind::Yield { .. } + // FIXME(richkadel): Also add coverage tests using async/await, and threading. + | TerminatorKind::SwitchInt { .. } => { // The `bb` has more than one _outgoing_ edge, or exits the function. Save the - // current sequence of `blocks` gathered to this point, as a new - // `BasicCoverageBlock`. - self.add_basic_coverage_block(blocks.split_off(0)); + // current sequence of `basic_blocks` gathered to this point, as a new + // `BasicCoverageBlockData`. + Self::add_basic_coverage_block( + &mut bcbs, + &mut bb_to_bcb, + basic_blocks.split_off(0), + ); debug!(" because term.kind = {:?}", term.kind); // Note that this condition is based on `TerminatorKind`, even though it // theoretically boils down to `successors().len() != 1`; that is, either zero // (e.g., `Return`, `Abort`) or multiple successors (e.g., `SwitchInt`), but - // since the Coverage graph (the BCB CFG projection) ignores things like unwind - // branches (which exist in the `Terminator`s `successors()` list) checking the - // number of successors won't work. + // since the BCB CFG ignores things like unwind branches (which exist in the + // `Terminator`s `successors()` list) checking the number of successors won't + // work. } TerminatorKind::Goto { .. } | TerminatorKind::Resume @@ -192,45 +153,222 @@ impl BasicCoverageBlocks { } } - if !blocks.is_empty() { - // process any remaining blocks into a final `BasicCoverageBlock` - self.add_basic_coverage_block(blocks.split_off(0)); - debug!(" because the end of the CFG was reached while traversing"); + if !basic_blocks.is_empty() { + // process any remaining basic_blocks into a final `BasicCoverageBlockData` + Self::add_basic_coverage_block(&mut bcbs, &mut bb_to_bcb, basic_blocks.split_off(0)); + debug!(" because the end of the MIR CFG was reached while traversing"); } + + (bcbs, bb_to_bcb) } - fn add_basic_coverage_block(&mut self, blocks: Vec) { - let leader_bb = blocks[0]; - let bcb = BasicCoverageBlock { blocks }; - debug!("adding BCB: {:?}", bcb); - self.vec[leader_bb] = Some(bcb); + fn add_basic_coverage_block( + bcbs: &mut IndexVec, + bb_to_bcb: &mut IndexVec>, + basic_blocks: Vec, + ) { + let bcb = BasicCoverageBlock::from_usize(bcbs.len()); + for &bb in basic_blocks.iter() { + bb_to_bcb[bb] = Some(bcb); + } + let bcb_data = BasicCoverageBlockData::from(basic_blocks); + debug!("adding bcb{}: {:?}", bcb.index(), bcb_data); + bcbs.push(bcb_data); + } + + #[inline(always)] + pub fn iter_enumerated( + &self, + ) -> impl Iterator { + self.bcbs.iter_enumerated() + } + + #[inline(always)] + pub fn bcb_from_bb(&self, bb: BasicBlock) -> Option { + if bb.index() < self.bb_to_bcb.len() { self.bb_to_bcb[bb] } else { None } + } + + #[inline(always)] + pub fn is_dominated_by(&self, node: BasicCoverageBlock, dom: BasicCoverageBlock) -> bool { + self.dominators.as_ref().unwrap().is_dominated_by(node, dom) + } + + #[inline(always)] + pub fn dominators(&self) -> &Dominators { + self.dominators.as_ref().unwrap() } } -impl std::ops::Index for BasicCoverageBlocks { - type Output = BasicCoverageBlock; +impl Index for CoverageGraph { + type Output = BasicCoverageBlockData; - fn index(&self, index: BasicBlock) -> &Self::Output { - self.vec[index].as_ref().expect("is_some if BasicBlock is a BasicCoverageBlock leader") + #[inline] + fn index(&self, index: BasicCoverageBlock) -> &BasicCoverageBlockData { + &self.bcbs[index] } } +impl IndexMut for CoverageGraph { + #[inline] + fn index_mut(&mut self, index: BasicCoverageBlock) -> &mut BasicCoverageBlockData { + &mut self.bcbs[index] + } +} + +impl graph::DirectedGraph for CoverageGraph { + type Node = BasicCoverageBlock; +} + +impl graph::WithNumNodes for CoverageGraph { + #[inline] + fn num_nodes(&self) -> usize { + self.bcbs.len() + } +} + +impl graph::WithStartNode for CoverageGraph { + #[inline] + fn start_node(&self) -> Self::Node { + self.bcb_from_bb(mir::START_BLOCK) + .expect("mir::START_BLOCK should be in a BasicCoverageBlock") + } +} + +type BcbSuccessors<'graph> = std::slice::Iter<'graph, BasicCoverageBlock>; + +impl<'graph> graph::GraphSuccessors<'graph> for CoverageGraph { + type Item = BasicCoverageBlock; + type Iter = std::iter::Cloned>; +} + +impl graph::WithSuccessors for CoverageGraph { + #[inline] + fn successors(&self, node: Self::Node) -> >::Iter { + self.successors[node].iter().cloned() + } +} + +impl graph::GraphPredecessors<'graph> for CoverageGraph { + type Item = BasicCoverageBlock; + type Iter = std::vec::IntoIter; +} + +impl graph::WithPredecessors for CoverageGraph { + #[inline] + fn predecessors(&self, node: Self::Node) -> >::Iter { + self.predecessors[node].clone().into_iter() + } +} + +rustc_index::newtype_index! { + /// A node in the [control-flow graph][CFG] of CoverageGraph. + pub(crate) struct BasicCoverageBlock { + DEBUG_FORMAT = "bcb{}", + } +} + +/// A BasicCoverageBlockData (BCB) represents the maximal-length sequence of MIR BasicBlocks without +/// conditional branches, and form a new, simplified, coverage-specific Control Flow Graph, without +/// altering the original MIR CFG. +/// +/// Note that running the MIR `SimplifyCfg` transform is not sufficient (and therefore not +/// necessary). The BCB-based CFG is a more aggressive simplification. For example: +/// +/// * The BCB CFG ignores (trims) branches not relevant to coverage, such as unwind-related code, +/// that is injected by the Rust compiler but has no physical source code to count. This also +/// means a BasicBlock with a `Call` terminator can be merged into its primary successor target +/// block, in the same BCB. +/// * Some BasicBlock terminators support Rust-specific concerns--like borrow-checking--that are +/// not relevant to coverage analysis. `FalseUnwind`, for example, can be treated the same as +/// a `Goto`, and merged with its successor into the same BCB. +/// +/// Each BCB with at least one computed `CoverageSpan` will have no more than one `Counter`. +/// In some cases, a BCB's execution count can be computed by `Expression`. Additional +/// disjoint `CoverageSpan`s in a BCB can also be counted by `Expression` (by adding `ZERO` +/// to the BCB's primary counter or expression). +/// +/// The BCB CFG is critical to simplifying the coverage analysis by ensuring graph path-based +/// queries (`is_dominated_by()`, `predecessors`, `successors`, etc.) have branch (control flow) +/// significance. +#[derive(Debug, Clone)] +pub(crate) struct BasicCoverageBlockData { + pub basic_blocks: Vec, +} + +impl BasicCoverageBlockData { + pub fn from(basic_blocks: Vec) -> Self { + assert!(basic_blocks.len() > 0); + Self { basic_blocks } + } + + #[inline(always)] + pub fn leader_bb(&self) -> BasicBlock { + self.basic_blocks[0] + } + + #[inline(always)] + pub fn last_bb(&self) -> BasicBlock { + *self.basic_blocks.last().unwrap() + } + + #[inline(always)] + pub fn terminator<'a, 'tcx>(&self, mir_body: &'a mir::Body<'tcx>) -> &'a Terminator<'tcx> { + &mir_body[self.last_bb()].terminator() + } + + pub fn id(&self) -> String { + format!( + "@{}", + self.basic_blocks + .iter() + .map(|bb| bb.index().to_string()) + .collect::>() + .join(ID_SEPARATOR) + ) + } +} + +fn bcb_filtered_successors<'a, 'tcx>( + body: &'tcx &'a mir::Body<'tcx>, + term_kind: &'tcx TerminatorKind<'tcx>, +) -> Box + 'a> { + let mut successors = term_kind.successors(); + box match &term_kind { + // SwitchInt successors are never unwind, and all of them should be traversed. + TerminatorKind::SwitchInt { .. } => successors, + // For all other kinds, return only the first successor, if any, and ignore unwinds. + // NOTE: `chain(&[])` is required to coerce the `option::iter` (from + // `next().into_iter()`) into the `mir::Successors` aliased type. + _ => successors.next().into_iter().chain(&[]), + } + .filter(move |&&successor| body[successor].terminator().kind != TerminatorKind::Unreachable) +} + pub struct ShortCircuitPreorder< 'a, 'tcx, - F: Fn(&'tcx TerminatorKind<'tcx>) -> mir::Successors<'tcx>, + F: Fn( + &'tcx &'a mir::Body<'tcx>, + &'tcx TerminatorKind<'tcx>, + ) -> Box + 'a>, > { - body: &'a mir::Body<'tcx>, + body: &'tcx &'a mir::Body<'tcx>, visited: BitSet, worklist: Vec, filtered_successors: F, } -impl<'a, 'tcx, F: Fn(&'tcx TerminatorKind<'tcx>) -> mir::Successors<'tcx>> - ShortCircuitPreorder<'a, 'tcx, F> +impl< + 'a, + 'tcx, + F: Fn( + &'tcx &'a mir::Body<'tcx>, + &'tcx TerminatorKind<'tcx>, + ) -> Box + 'a>, +> ShortCircuitPreorder<'a, 'tcx, F> { pub fn new( - body: &'a mir::Body<'tcx>, + body: &'tcx &'a mir::Body<'tcx>, filtered_successors: F, ) -> ShortCircuitPreorder<'a, 'tcx, F> { let worklist = vec![mir::START_BLOCK]; @@ -244,8 +382,14 @@ impl<'a, 'tcx, F: Fn(&'tcx TerminatorKind<'tcx>) -> mir::Successors<'tcx>> } } -impl<'a: 'tcx, 'tcx, F: Fn(&'tcx TerminatorKind<'tcx>) -> mir::Successors<'tcx>> Iterator - for ShortCircuitPreorder<'a, 'tcx, F> +impl< + 'a: 'tcx, + 'tcx, + F: Fn( + &'tcx &'a mir::Body<'tcx>, + &'tcx TerminatorKind<'tcx>, + ) -> Box + 'a>, +> Iterator for ShortCircuitPreorder<'a, 'tcx, F> { type Item = (BasicBlock, &'a BasicBlockData<'tcx>); @@ -258,7 +402,7 @@ impl<'a: 'tcx, 'tcx, F: Fn(&'tcx TerminatorKind<'tcx>) -> mir::Successors<'tcx>> let data = &self.body[idx]; if let Some(ref term) = data.terminator { - self.worklist.extend((self.filtered_successors)(&term.kind)); + self.worklist.extend((self.filtered_successors)(&self.body, &term.kind)); } return Some((idx, data)); diff --git a/compiler/rustc_mir/src/transform/coverage/mod.rs b/compiler/rustc_mir/src/transform/coverage/mod.rs index 9961afba8e7..aa5771cfad4 100644 --- a/compiler/rustc_mir/src/transform/coverage/mod.rs +++ b/compiler/rustc_mir/src/transform/coverage/mod.rs @@ -6,13 +6,14 @@ mod graph; mod spans; use counters::CoverageCounters; -use graph::BasicCoverageBlocks; +use graph::CoverageGraph; use spans::{CoverageSpan, CoverageSpans}; use crate::transform::MirPass; use crate::util::pretty; use rustc_data_structures::fingerprint::Fingerprint; +use rustc_data_structures::graph::WithNumNodes; use rustc_data_structures::stable_hasher::{HashStable, StableHasher}; use rustc_data_structures::sync::Lrc; use rustc_index::vec::IndexVec; @@ -73,7 +74,7 @@ struct Instrumentor<'a, 'tcx> { tcx: TyCtxt<'tcx>, mir_body: &'a mut mir::Body<'tcx>, body_span: Span, - basic_coverage_blocks: BasicCoverageBlocks, + basic_coverage_blocks: CoverageGraph, coverage_counters: CoverageCounters, } @@ -82,7 +83,7 @@ impl<'a, 'tcx> Instrumentor<'a, 'tcx> { let hir_body = hir_body(tcx, mir_body.source.def_id()); let body_span = hir_body.value.span; let function_source_hash = hash_mir_source(tcx, hir_body); - let basic_coverage_blocks = BasicCoverageBlocks::from_mir(mir_body); + let basic_coverage_blocks = CoverageGraph::from_mir(mir_body); Self { pass_name, tcx, @@ -103,7 +104,7 @@ impl<'a, 'tcx> Instrumentor<'a, 'tcx> { debug!("instrumenting {:?}, span: {}", def_id, source_map.span_to_string(body_span)); //////////////////////////////////////////////////// - // Compute `CoverageSpan`s from the `BasicCoverageBlocks`. + // Compute `CoverageSpan`s from the `CoverageGraph`. let coverage_spans = CoverageSpans::generate_coverage_spans( &self.mir_body, body_span, @@ -135,9 +136,11 @@ impl<'a, 'tcx> Instrumentor<'a, 'tcx> { let source_file = source_map.lookup_source_file(body_span.lo()); let file_name = Symbol::intern(&source_file.name.to_string()); - let mut bb_counters = IndexVec::from_elem_n(None, self.mir_body.basic_blocks().len()); - for CoverageSpan { span, bcb_leader_bb: bb, .. } in coverage_spans { - if let Some(&counter_operand) = bb_counters[bb].as_ref() { + let mut bcb_counters = IndexVec::from_elem_n(None, self.basic_coverage_blocks.num_nodes()); + for covspan in coverage_spans { + let bcb = covspan.bcb; + let span = covspan.span; + if let Some(&counter_operand) = bcb_counters[bcb].as_ref() { let expression = self.coverage_counters.make_expression( counter_operand, Op::Add, @@ -149,6 +152,7 @@ impl<'a, 'tcx> Instrumentor<'a, 'tcx> { span, source_map.span_to_snippet(span).expect("Error getting source for span"), ); + let bb = self.basic_coverage_blocks[bcb].leader_bb(); let code_region = make_code_region(file_name, &source_file, span, body_span); inject_statement(self.mir_body, expression, bb, Some(code_region)); } else { @@ -160,7 +164,8 @@ impl<'a, 'tcx> Instrumentor<'a, 'tcx> { source_map.span_to_snippet(span).expect("Error getting source for span"), ); let counter_operand = counter.as_operand_id(); - bb_counters[bb] = Some(counter_operand); + bcb_counters[bcb] = Some(counter_operand); + let bb = self.basic_coverage_blocks[bcb].leader_bb(); let code_region = make_code_region(file_name, &source_file, span, body_span); inject_statement(self.mir_body, counter, bb, Some(code_region)); } diff --git a/compiler/rustc_mir/src/transform/coverage/spans.rs b/compiler/rustc_mir/src/transform/coverage/spans.rs index 7957b6f3ff5..23531ecf229 100644 --- a/compiler/rustc_mir/src/transform/coverage/spans.rs +++ b/compiler/rustc_mir/src/transform/coverage/spans.rs @@ -1,9 +1,8 @@ use super::debug::term_type; -use super::graph::{BasicCoverageBlock, BasicCoverageBlocks}; +use super::graph::{BasicCoverageBlock, BasicCoverageBlockData, CoverageGraph}; use crate::util::spanview::source_range_no_file; -use rustc_data_structures::graph::dominators::Dominators; use rustc_data_structures::graph::WithNumNodes; use rustc_index::bit_set::BitSet; use rustc_middle::mir::{ @@ -69,7 +68,7 @@ impl CoverageStatement { #[derive(Debug, Clone)] pub(crate) struct CoverageSpan { pub span: Span, - pub bcb_leader_bb: BasicBlock, + pub bcb: BasicCoverageBlock, pub coverage_statements: Vec, pub is_closure: bool, } @@ -78,7 +77,7 @@ impl CoverageSpan { pub fn for_statement( statement: &Statement<'tcx>, span: Span, - bcb: &BasicCoverageBlock, + bcb: BasicCoverageBlock, bb: BasicBlock, stmt_index: usize, ) -> Self { @@ -92,16 +91,16 @@ impl CoverageSpan { Self { span, - bcb_leader_bb: bcb.leader_bb(), + bcb, coverage_statements: vec![CoverageStatement::Statement(bb, span, stmt_index)], is_closure, } } - pub fn for_terminator(span: Span, bcb: &BasicCoverageBlock, bb: BasicBlock) -> Self { + pub fn for_terminator(span: Span, bcb: BasicCoverageBlock, bb: BasicBlock) -> Self { Self { span, - bcb_leader_bb: bcb.leader_bb(), + bcb, coverage_statements: vec![CoverageStatement::Terminator(bb, span)], is_closure: false, } @@ -132,7 +131,7 @@ impl CoverageSpan { #[inline] pub fn is_in_same_bcb(&self, other: &Self) -> bool { - self.bcb_leader_bb == other.bcb_leader_bb + self.bcb == other.bcb } pub fn format_coverage_statements( @@ -164,15 +163,12 @@ pub struct CoverageSpans<'a, 'tcx> { /// The MIR, used to look up `BasicBlockData`. mir_body: &'a mir::Body<'tcx>, - /// A snapshot of the MIR CFG dominators before injecting any coverage statements. - dominators: Dominators, - /// A `Span` covering the function body of the MIR (typically from left curly brace to right /// curly brace). body_span: Span, /// The BasicCoverageBlock Control Flow Graph (BCB CFG). - basic_coverage_blocks: &'a BasicCoverageBlocks, + basic_coverage_blocks: &'a CoverageGraph, /// The initial set of `CoverageSpan`s, sorted by `Span` (`lo` and `hi`) and by relative /// dominance between the `BasicCoverageBlock`s of equal `Span`s. @@ -213,12 +209,10 @@ impl<'a, 'tcx> CoverageSpans<'a, 'tcx> { pub(crate) fn generate_coverage_spans( mir_body: &'a mir::Body<'tcx>, body_span: Span, - basic_coverage_blocks: &'a BasicCoverageBlocks, + basic_coverage_blocks: &'a CoverageGraph, ) -> Vec { - let dominators = mir_body.dominators(); let mut coverage_spans = CoverageSpans { mir_body, - dominators, body_span, basic_coverage_blocks, sorted_spans_iter: None, @@ -246,7 +240,7 @@ impl<'a, 'tcx> CoverageSpans<'a, 'tcx> { /// The basic steps are: /// /// 1. Extract an initial set of spans from the `Statement`s and `Terminator`s of each - /// `BasicCoverageBlock`. + /// `BasicCoverageBlockData`. /// 2. Sort the spans by span.lo() (starting position). Spans that start at the same position /// are sorted with longer spans before shorter spans; and equal spans are sorted /// (deterministically) based on "dominator" relationship (if any). @@ -263,8 +257,8 @@ impl<'a, 'tcx> CoverageSpans<'a, 'tcx> { /// to be). fn mir_to_initial_sorted_coverage_spans(&self) -> Vec { let mut initial_spans = Vec::::with_capacity(self.mir_body.num_nodes() * 2); - for bcb in self.basic_coverage_blocks.iter() { - for coverage_span in self.bcb_to_initial_coverage_spans(bcb) { + for (bcb, bcb_data) in self.basic_coverage_blocks.iter_enumerated() { + for coverage_span in self.bcb_to_initial_coverage_spans(bcb, bcb_data) { initial_spans.push(coverage_span); } } @@ -285,7 +279,7 @@ impl<'a, 'tcx> CoverageSpans<'a, 'tcx> { // dominators always come after the dominated equal spans). When later // comparing two spans in order, the first will either dominate the second, // or they will have no dominator relationship. - self.dominators.rank_partial_cmp(b.bcb_leader_bb, a.bcb_leader_bb) + self.basic_coverage_blocks.dominators().rank_partial_cmp(b.bcb, a.bcb) } } else { // Sort hi() in reverse order so shorter spans are attempted after longer spans. @@ -357,13 +351,13 @@ impl<'a, 'tcx> CoverageSpans<'a, 'tcx> { let mut has_coverage = BitSet::new_empty(basic_coverage_blocks.num_nodes()); for covspan in &refined_spans { if !covspan.span.is_empty() { - has_coverage.insert(covspan.bcb_leader_bb); + has_coverage.insert(covspan.bcb); } } refined_spans.retain(|covspan| { !(covspan.span.is_empty() - && is_goto(&mir_body[covspan.bcb_leader_bb].terminator().kind) - && has_coverage.contains(covspan.bcb_leader_bb)) + && is_goto(&basic_coverage_blocks[covspan.bcb].terminator(mir_body).kind) + && has_coverage.contains(covspan.bcb)) }); // Remove `CoverageSpan`s derived from closures, originally added to ensure the coverage @@ -374,12 +368,17 @@ impl<'a, 'tcx> CoverageSpans<'a, 'tcx> { } // Generate a set of `CoverageSpan`s from the filtered set of `Statement`s and `Terminator`s of - // the `BasicBlock`(s) in the given `BasicCoverageBlock`. One `CoverageSpan` is generated + // the `BasicBlock`(s) in the given `BasicCoverageBlockData`. One `CoverageSpan` is generated // for each `Statement` and `Terminator`. (Note that subsequent stages of coverage analysis will // merge some `CoverageSpan`s, at which point a `CoverageSpan` may represent multiple // `Statement`s and/or `Terminator`s.) - fn bcb_to_initial_coverage_spans(&self, bcb: &BasicCoverageBlock) -> Vec { - bcb.blocks + fn bcb_to_initial_coverage_spans( + &self, + bcb: BasicCoverageBlock, + bcb_data: &'a BasicCoverageBlockData, + ) -> Vec { + bcb_data + .basic_blocks .iter() .map(|bbref| { let bb = *bbref; @@ -636,7 +635,7 @@ impl<'a, 'tcx> CoverageSpans<'a, 'tcx> { } fn span_bcb_is_dominated_by(&self, covspan: &CoverageSpan, dom_covspan: &CoverageSpan) -> bool { - self.dominators.is_dominated_by(covspan.bcb_leader_bb, dom_covspan.bcb_leader_bb) + self.basic_coverage_blocks.is_dominated_by(covspan.bcb, dom_covspan.bcb) } } diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.lazy_boolean.json b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.lazy_boolean.json index 95a1dcd3b8e..5a953b90b42 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.lazy_boolean.json +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.lazy_boolean.json @@ -17,14 +17,14 @@ }, "lines": { "count": 40, - "covered": 32, - "percent": 80 + "covered": 30, + "percent": 75 }, "regions": { - "count": 39, - "covered": 28, + "count": 37, + "covered": 26, "notcovered": 11, - "percent": 71.7948717948718 + "percent": 70.27027027027027 } } } @@ -42,14 +42,14 @@ }, "lines": { "count": 40, - "covered": 32, - "percent": 80 + "covered": 30, + "percent": 75 }, "regions": { - "count": 39, - "covered": 28, + "count": 37, + "covered": 26, "notcovered": 11, - "percent": 71.7948717948718 + "percent": 70.27027027027027 } } } diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.loops_and_branches.json b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.loops_and_branches.json index aec85cd0329..cb74a1b7e27 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.loops_and_branches.json +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.loops_and_branches.json @@ -21,10 +21,10 @@ "percent": 100 }, "regions": { - "count": 10, + "count": 9, "covered": 8, - "notcovered": 2, - "percent": 80 + "notcovered": 1, + "percent": 88.88888888888889 } } } @@ -46,10 +46,10 @@ "percent": 100 }, "regions": { - "count": 10, + "count": 9, "covered": 8, - "notcovered": 2, - "percent": 80 + "notcovered": 1, + "percent": 88.88888888888889 } } } diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.nested_loops.json b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.nested_loops.json index dbe4f9ca6fd..68163eb7636 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.nested_loops.json +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.nested_loops.json @@ -17,14 +17,14 @@ }, "lines": { "count": 21, - "covered": 17, - "percent": 80.95238095238095 + "covered": 16, + "percent": 76.19047619047619 }, "regions": { - "count": 20, - "covered": 16, + "count": 18, + "covered": 14, "notcovered": 4, - "percent": 80 + "percent": 77.77777777777779 } } } @@ -42,14 +42,14 @@ }, "lines": { "count": 21, - "covered": 17, - "percent": 80.95238095238095 + "covered": 16, + "percent": 76.19047619047619 }, "regions": { - "count": 20, - "covered": 16, + "count": 18, + "covered": 14, "notcovered": 4, - "percent": 80 + "percent": 77.77777777777779 } } } diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.try_error_result.json b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.try_error_result.json index e845ee29fa4..39e17359eee 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.try_error_result.json +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.try_error_result.json @@ -16,15 +16,15 @@ "percent": 100 }, "lines": { - "count": 20, - "covered": 19, - "percent": 95 + "count": 19, + "covered": 18, + "percent": 94.73684210526315 }, "regions": { - "count": 20, - "covered": 17, + "count": 18, + "covered": 15, "notcovered": 3, - "percent": 85 + "percent": 83.33333333333334 } } } @@ -41,15 +41,15 @@ "percent": 100 }, "lines": { - "count": 20, - "covered": 19, - "percent": 95 + "count": 19, + "covered": 18, + "percent": 94.73684210526315 }, "regions": { - "count": 20, - "covered": 17, + "count": 18, + "covered": 15, "notcovered": 3, - "percent": 85 + "percent": 83.33333333333334 } } } diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.while.json b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.while.json index 27862087ed5..339c6555668 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.while.json +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.while.json @@ -21,10 +21,10 @@ "percent": 75 }, "regions": { - "count": 5, + "count": 4, "covered": 3, - "notcovered": 2, - "percent": 60 + "notcovered": 1, + "percent": 75 } } } @@ -46,10 +46,10 @@ "percent": 75 }, "regions": { - "count": 5, + "count": 4, "covered": 3, - "notcovered": 2, - "percent": 60 + "notcovered": 1, + "percent": 75 } } } diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.while_early_return.json b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.while_early_return.json index 555ac745d53..a116a91a60a 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.while_early_return.json +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_export_coverage.while_early_return.json @@ -16,15 +16,15 @@ "percent": 100 }, "lines": { - "count": 18, + "count": 17, "covered": 15, - "percent": 83.33333333333334 + "percent": 88.23529411764706 }, "regions": { - "count": 11, + "count": 10, "covered": 8, - "notcovered": 3, - "percent": 72.72727272727273 + "notcovered": 2, + "percent": 80 } } } @@ -41,15 +41,15 @@ "percent": 100 }, "lines": { - "count": 18, + "count": 17, "covered": 15, - "percent": 83.33333333333334 + "percent": 88.23529411764706 }, "regions": { - "count": 11, + "count": 10, "covered": 8, - "notcovered": 3, - "percent": 72.72727272727273 + "notcovered": 2, + "percent": 80 } } } diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.lazy_boolean.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.lazy_boolean.txt index f01f69f2496..1b503033911 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.lazy_boolean.txt +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.lazy_boolean.txt @@ -50,7 +50,7 @@ 47| 0| { 48| 0| c = 400 49| 0| ; - 50| 1| } + 50| 0| } 51| | 52| 1| if !is_true { 53| 0| a = 2; @@ -60,6 +60,6 @@ 57| 1| b = 30; 58| 1| } else { 59| 0| c = 400; - 60| 1| } + 60| 0| } 61| 1|} diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.nested_loops.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.nested_loops.txt index e0545c76f78..c9f373bf6a7 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.nested_loops.txt +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.nested_loops.txt @@ -19,8 +19,8 @@ 19| 0| a -= 2; 20| 0| } 21| 2| } - 22| 3| } + 22| 2| } 23| 0| countdown -= 1; - 24| 1| } + 24| 0| } 25| 1|} diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.try_error_result.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.try_error_result.txt index 05d72d0de46..c43b492db60 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.try_error_result.txt +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.try_error_result.txt @@ -6,7 +6,7 @@ 6| 1| Err(()) 7| | } else { 8| 5| Ok(()) - 9| 1| } + 9| | } 10| 6|} 11| | 12| |fn main() -> Result<(),()> { @@ -31,7 +31,7 @@ 31| 5| call(/*return_error=*/ false)?; ^0 32| 5| } - 33| 6| } + 33| 5| } 34| 0| Ok(()) 35| 2|} diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.while_early_return.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.while_early_return.txt index 2e0c4022bed..e5c5b05a6fc 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.while_early_return.txt +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage.while_early_return.txt @@ -24,7 +24,7 @@ 24| | else 25| | { 26| 1| Err(1) - 27| 0| } + 27| | } 28| | ; 29| | } 30| 6| countdown diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.drop_trait.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.drop_trait.txt index 447c3c89562..2bafe7d88e2 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.drop_trait.txt +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.drop_trait.txt @@ -4,14 +4,13 @@ Counter in file 0 15:9 -> 17:42, #1 Counter in file 0 19:8 -> 19:12, (#1 + 0) Counter in file 0 20:9 -> 21:22, #2 Counter in file 0 27:1 -> 27:2, #4 -Counter in file 0 27:1 -> 27:2, (#2 + 0) Emitting segments for file: ../coverage/drop_trait.rs Combined regions: 9:24 -> 11:6 (count=2) 15:9 -> 17:42 (count=1) 19:8 -> 19:12 (count=1) 20:9 -> 21:22 (count=1) - 27:1 -> 27:2 (count=2) + 27:1 -> 27:2 (count=1) Segment at 9:24 (count = 2), RegionEntry Segment at 11:6 (count = 0), Skipped Segment at 15:9 (count = 1), RegionEntry @@ -20,5 +19,5 @@ Segment at 19:8 (count = 1), RegionEntry Segment at 19:12 (count = 0), Skipped Segment at 20:9 (count = 1), RegionEntry Segment at 21:22 (count = 0), Skipped -Segment at 27:1 (count = 2), RegionEntry +Segment at 27:1 (count = 1), RegionEntry Segment at 27:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.generics.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.generics.txt index 5843b917588..a13b1f3d786 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.generics.txt +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.generics.txt @@ -5,7 +5,6 @@ Counter in file 0 23:9 -> 28:28, #1 Counter in file 0 30:8 -> 30:12, (#1 + 0) Counter in file 0 31:9 -> 32:22, #2 Counter in file 0 38:1 -> 38:2, #4 -Counter in file 0 38:1 -> 38:2, (#2 + 0) Counter in file 0 10:49 -> 12:6, #1 Counter in file 0 10:49 -> 12:6, #1 Emitting segments for file: ../coverage/generics.rs @@ -15,7 +14,7 @@ Combined regions: 23:9 -> 28:28 (count=1) 30:8 -> 30:12 (count=1) 31:9 -> 32:22 (count=1) - 38:1 -> 38:2 (count=2) + 38:1 -> 38:2 (count=1) Segment at 10:49 (count = 3), RegionEntry Segment at 12:6 (count = 0), Skipped Segment at 17:24 (count = 2), RegionEntry @@ -26,7 +25,7 @@ Segment at 30:8 (count = 1), RegionEntry Segment at 30:12 (count = 0), Skipped Segment at 31:9 (count = 1), RegionEntry Segment at 32:22 (count = 0), Skipped -Segment at 38:1 (count = 2), RegionEntry +Segment at 38:1 (count = 1), RegionEntry Segment at 38:2 (count = 0), Skipped Emitting segments for function: _RNvMCs4fqI2P2rA04_8genericsINtB2_8FireworkdE12set_strengthB2_ Combined regions: diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.if_else.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.if_else.txt index 660e85f91f5..270a6f2b14a 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.if_else.txt +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.if_else.txt @@ -2,22 +2,18 @@ Args: /usr/local/google/home/richkadel/rust/build/x86_64-unknown-linux-gnu/llvm/ Counter in file 0 7:9 -> 11:16, #1 Counter in file 0 12:5 -> 17:6, #2 Counter in file 0 20:9 -> 22:16, #3 -Counter in file 0 23:6 -> 23:7, (#2 + 0) Counter in file 0 26:9 -> 26:16, #4 Counter in file 0 27:5 -> 32:6, #5 Counter in file 0 34:5 -> 39:6, #6 -Counter in file 0 39:6 -> 39:7, (#5 + 0) Counter in file 0 40:1 -> 40:2, #7 Emitting segments for file: ../coverage/if_else.rs Combined regions: 7:9 -> 11:16 (count=1) 12:5 -> 17:6 (count=1) 20:9 -> 22:16 (count=0) - 23:6 -> 23:7 (count=1) 26:9 -> 26:16 (count=1) 27:5 -> 32:6 (count=1) 34:5 -> 39:6 (count=0) - 39:6 -> 39:7 (count=1) 40:1 -> 40:2 (count=1) Segment at 7:9 (count = 1), RegionEntry Segment at 11:16 (count = 0), Skipped @@ -25,14 +21,11 @@ Segment at 12:5 (count = 1), RegionEntry Segment at 17:6 (count = 0), Skipped Segment at 20:9 (count = 0), RegionEntry Segment at 22:16 (count = 0), Skipped -Segment at 23:6 (count = 1), RegionEntry -Segment at 23:7 (count = 0), Skipped Segment at 26:9 (count = 1), RegionEntry Segment at 26:16 (count = 0), Skipped Segment at 27:5 (count = 1), RegionEntry Segment at 32:6 (count = 0), Skipped Segment at 34:5 (count = 0), RegionEntry -Segment at 39:6 (count = 1), RegionEntry -Segment at 39:7 (count = 0), Skipped +Segment at 39:6 (count = 0), Skipped Segment at 40:1 (count = 1), RegionEntry Segment at 40:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.lazy_boolean.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.lazy_boolean.txt index dd93c3a9392..4561fcc5b36 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.lazy_boolean.txt +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.lazy_boolean.txt @@ -29,14 +29,12 @@ Counter in file 0 38:6 -> 38:7, #22 Counter in file 0 41:9 -> 41:16, #23 Counter in file 0 42:5 -> 45:6, #24 Counter in file 0 47:5 -> 50:6, #25 -Counter in file 0 50:6 -> 50:7, (#24 + 0) Counter in file 0 52:8 -> 52:16, #26 Counter in file 0 52:17 -> 54:6, #27 Counter in file 0 54:6 -> 54:7, #28 Counter in file 0 56:8 -> 56:15, #29 Counter in file 0 56:16 -> 58:6, #30 Counter in file 0 58:12 -> 60:6, #31 -Counter in file 0 60:6 -> 60:7, (#30 + 0) Counter in file 0 61:1 -> 61:2, #32 Emitting segments for file: ../coverage/lazy_boolean.rs Combined regions: @@ -66,14 +64,12 @@ Combined regions: 41:9 -> 41:16 (count=1) 42:5 -> 45:6 (count=1) 47:5 -> 50:6 (count=0) - 50:6 -> 50:7 (count=1) 52:8 -> 52:16 (count=1) 52:17 -> 54:6 (count=0) 54:6 -> 54:7 (count=1) 56:8 -> 56:15 (count=1) 56:16 -> 58:6 (count=1) 58:12 -> 60:6 (count=0) - 60:6 -> 60:7 (count=1) 61:1 -> 61:2 (count=1) Segment at 7:9 (count = 1), RegionEntry Segment at 9:42 (count = 0), Skipped @@ -120,8 +116,7 @@ Segment at 41:16 (count = 0), Skipped Segment at 42:5 (count = 1), RegionEntry Segment at 45:6 (count = 0), Skipped Segment at 47:5 (count = 0), RegionEntry -Segment at 50:6 (count = 1), RegionEntry -Segment at 50:7 (count = 0), Skipped +Segment at 50:6 (count = 0), Skipped Segment at 52:8 (count = 1), RegionEntry Segment at 52:16 (count = 0), Skipped Segment at 52:17 (count = 0), RegionEntry @@ -132,7 +127,6 @@ Segment at 56:15 (count = 0), Skipped Segment at 56:16 (count = 1), RegionEntry Segment at 58:6 (count = 0), Skipped Segment at 58:12 (count = 0), RegionEntry -Segment at 60:6 (count = 1), RegionEntry -Segment at 60:7 (count = 0), Skipped +Segment at 60:6 (count = 0), Skipped Segment at 61:1 (count = 1), RegionEntry Segment at 61:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.loops_and_branches.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.loops_and_branches.txt index d6e4403268a..7cde2205cbf 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.loops_and_branches.txt +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.loops_and_branches.txt @@ -7,7 +7,6 @@ Counter in file 0 15:31 -> 15:32, #8 Counter in file 0 17:10 -> 17:11, #10 Counter in file 0 18:9 -> 18:15, #11 Counter in file 0 19:5 -> 19:6, #12 -Counter in file 0 19:5 -> 19:6, (#8 + 0) Counter in file 0 22:11 -> 25:2, #1 Emitting segments for file: ../coverage/loops_and_branches.rs Combined regions: diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.nested_loops.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.nested_loops.txt index eec4aec79e6..59fb5c366f2 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.nested_loops.txt +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.nested_loops.txt @@ -14,10 +14,8 @@ Counter in file 0 17:21 -> 17:33, #10 Counter in file 0 19:21 -> 21:14, #11 Counter in file 0 21:14 -> 21:15, #12 Counter in file 0 22:10 -> 22:11, #13 -Counter in file 0 22:10 -> 22:11, (#3 + 0) Counter in file 0 23:9 -> 23:23, #14 Counter in file 0 24:6 -> 24:7, #15 -Counter in file 0 24:6 -> 24:7, (#1 + 0) Counter in file 0 25:1 -> 25:2, #16 Emitting segments for file: ../coverage/nested_loops.rs Combined regions: @@ -35,9 +33,9 @@ Combined regions: 17:21 -> 17:33 (count=1) 19:21 -> 21:14 (count=0) 21:14 -> 21:15 (count=2) - 22:10 -> 22:11 (count=3) + 22:10 -> 22:11 (count=2) 23:9 -> 23:23 (count=0) - 24:6 -> 24:7 (count=1) + 24:6 -> 24:7 (count=0) 25:1 -> 25:2 (count=1) Segment at 2:9 (count = 1), RegionEntry Segment at 3:27 (count = 0), Skipped @@ -66,11 +64,11 @@ Segment at 17:33 (count = 0), Skipped Segment at 19:21 (count = 0), RegionEntry Segment at 21:14 (count = 2), RegionEntry Segment at 21:15 (count = 0), Skipped -Segment at 22:10 (count = 3), RegionEntry +Segment at 22:10 (count = 2), RegionEntry Segment at 22:11 (count = 0), Skipped Segment at 23:9 (count = 0), RegionEntry Segment at 23:23 (count = 0), Skipped -Segment at 24:6 (count = 1), RegionEntry +Segment at 24:6 (count = 0), RegionEntry Segment at 24:7 (count = 0), Skipped Segment at 25:1 (count = 1), RegionEntry Segment at 25:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.try_error_result.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.try_error_result.txt index d510223417a..7dea637551d 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.try_error_result.txt +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.try_error_result.txt @@ -10,21 +10,18 @@ Counter in file 0 31:42 -> 31:43, #8 Counter in file 0 32:10 -> 32:11, #9 Counter in file 0 32:10 -> 32:11, #10 Counter in file 0 33:6 -> 33:7, #11 -Counter in file 0 33:6 -> 33:7, (#1 + 0) Counter in file 0 34:5 -> 34:11, #12 Counter in file 0 35:1 -> 35:2, #13 Counter in file 0 35:1 -> 35:2, #14 Counter in file 0 5:8 -> 5:20, #1 Counter in file 0 6:9 -> 6:16, #2 Counter in file 0 8:9 -> 8:15, #3 -Counter in file 0 9:6 -> 9:7, (#2 + 0) Counter in file 0 10:1 -> 10:2, #4 Emitting segments for file: ../coverage/try_error_result.rs Combined regions: 5:8 -> 5:20 (count=6) 6:9 -> 6:16 (count=1) 8:9 -> 8:15 (count=5) - 9:6 -> 9:7 (count=1) 10:1 -> 10:2 (count=6) 13:9 -> 14:23 (count=1) 17:9 -> 17:10 (count=6) @@ -35,7 +32,7 @@ Combined regions: 31:13 -> 31:42 (count=5) 31:42 -> 31:43 (count=0) 32:10 -> 32:11 (count=5) - 33:6 -> 33:7 (count=6) + 33:6 -> 33:7 (count=5) 34:5 -> 34:11 (count=0) 35:1 -> 35:2 (count=2) Segment at 5:8 (count = 6), RegionEntry @@ -44,8 +41,6 @@ Segment at 6:9 (count = 1), RegionEntry Segment at 6:16 (count = 0), Skipped Segment at 8:9 (count = 5), RegionEntry Segment at 8:15 (count = 0), Skipped -Segment at 9:6 (count = 1), RegionEntry -Segment at 9:7 (count = 0), Skipped Segment at 10:1 (count = 6), RegionEntry Segment at 10:2 (count = 0), Skipped Segment at 13:9 (count = 1), RegionEntry @@ -64,7 +59,7 @@ Segment at 31:42 (count = 0), RegionEntry Segment at 31:43 (count = 0), Skipped Segment at 32:10 (count = 5), RegionEntry Segment at 32:11 (count = 0), Skipped -Segment at 33:6 (count = 6), RegionEntry +Segment at 33:6 (count = 5), RegionEntry Segment at 33:7 (count = 0), Skipped Segment at 34:5 (count = 0), RegionEntry Segment at 34:11 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.while.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.while.txt index 52c809b5325..a2be958660e 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.while.txt +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.while.txt @@ -2,21 +2,18 @@ Args: /usr/local/google/home/richkadel/rust/build/x86_64-unknown-linux-gnu/llvm/ Counter in file 0 2:9 -> 2:16, #1 Counter in file 0 3:11 -> 3:20, #2 Counter in file 0 3:21 -> 4:6, #3 -Counter in file 0 4:6 -> 4:7, (#3 + 0) Counter in file 0 5:1 -> 5:2, #4 Emitting segments for file: ../coverage/while.rs Combined regions: 2:9 -> 2:16 (count=1) 3:11 -> 3:20 (count=1) 3:21 -> 4:6 (count=0) - 4:6 -> 4:7 (count=0) 5:1 -> 5:2 (count=1) Segment at 2:9 (count = 1), RegionEntry Segment at 2:16 (count = 0), Skipped Segment at 3:11 (count = 1), RegionEntry Segment at 3:20 (count = 0), Skipped Segment at 3:21 (count = 0), RegionEntry -Segment at 4:6 (count = 0), RegionEntry -Segment at 4:7 (count = 0), Skipped +Segment at 4:6 (count = 0), Skipped Segment at 5:1 (count = 1), RegionEntry Segment at 5:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.while_early_return.txt b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.while_early_return.txt index 30d14f4f987..02ab24050ba 100644 --- a/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.while_early_return.txt +++ b/src/test/run-make-fulldeps/coverage-reports-base/expected_show_coverage_counters.while_early_return.txt @@ -5,7 +5,6 @@ Counter in file 0 12:13 -> 14:14, #3 Counter in file 0 18:21 -> 20:22, #4 Counter in file 0 22:21 -> 22:27, #5 Counter in file 0 26:21 -> 26:27, #6 -Counter in file 0 27:18 -> 27:19, (#5 + 0) Counter in file 0 30:9 -> 32:10, #7 Counter in file 0 35:5 -> 35:11, #8 Counter in file 0 36:1 -> 36:2, #9 @@ -18,7 +17,6 @@ Combined regions: 18:21 -> 20:22 (count=1) 22:21 -> 22:27 (count=0) 26:21 -> 26:27 (count=1) - 27:18 -> 27:19 (count=0) 30:9 -> 32:10 (count=6) 35:5 -> 35:11 (count=0) 36:1 -> 36:2 (count=2) @@ -34,8 +32,6 @@ Segment at 22:21 (count = 0), RegionEntry Segment at 22:27 (count = 0), Skipped Segment at 26:21 (count = 1), RegionEntry Segment at 26:27 (count = 0), Skipped -Segment at 27:18 (count = 0), RegionEntry -Segment at 27:19 (count = 0), Skipped Segment at 30:9 (count = 6), RegionEntry Segment at 32:10 (count = 0), Skipped Segment at 35:5 (count = 0), RegionEntry diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.lazy_boolean.json b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.lazy_boolean.json index 95a1dcd3b8e..5a953b90b42 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.lazy_boolean.json +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.lazy_boolean.json @@ -17,14 +17,14 @@ }, "lines": { "count": 40, - "covered": 32, - "percent": 80 + "covered": 30, + "percent": 75 }, "regions": { - "count": 39, - "covered": 28, + "count": 37, + "covered": 26, "notcovered": 11, - "percent": 71.7948717948718 + "percent": 70.27027027027027 } } } @@ -42,14 +42,14 @@ }, "lines": { "count": 40, - "covered": 32, - "percent": 80 + "covered": 30, + "percent": 75 }, "regions": { - "count": 39, - "covered": 28, + "count": 37, + "covered": 26, "notcovered": 11, - "percent": 71.7948717948718 + "percent": 70.27027027027027 } } } diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.loops_and_branches.json b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.loops_and_branches.json index aec85cd0329..cb74a1b7e27 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.loops_and_branches.json +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.loops_and_branches.json @@ -21,10 +21,10 @@ "percent": 100 }, "regions": { - "count": 10, + "count": 9, "covered": 8, - "notcovered": 2, - "percent": 80 + "notcovered": 1, + "percent": 88.88888888888889 } } } @@ -46,10 +46,10 @@ "percent": 100 }, "regions": { - "count": 10, + "count": 9, "covered": 8, - "notcovered": 2, - "percent": 80 + "notcovered": 1, + "percent": 88.88888888888889 } } } diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.nested_loops.json b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.nested_loops.json index dbe4f9ca6fd..68163eb7636 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.nested_loops.json +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.nested_loops.json @@ -17,14 +17,14 @@ }, "lines": { "count": 21, - "covered": 17, - "percent": 80.95238095238095 + "covered": 16, + "percent": 76.19047619047619 }, "regions": { - "count": 20, - "covered": 16, + "count": 18, + "covered": 14, "notcovered": 4, - "percent": 80 + "percent": 77.77777777777779 } } } @@ -42,14 +42,14 @@ }, "lines": { "count": 21, - "covered": 17, - "percent": 80.95238095238095 + "covered": 16, + "percent": 76.19047619047619 }, "regions": { - "count": 20, - "covered": 16, + "count": 18, + "covered": 14, "notcovered": 4, - "percent": 80 + "percent": 77.77777777777779 } } } diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.try_error_result.json b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.try_error_result.json index e845ee29fa4..39e17359eee 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.try_error_result.json +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.try_error_result.json @@ -16,15 +16,15 @@ "percent": 100 }, "lines": { - "count": 20, - "covered": 19, - "percent": 95 + "count": 19, + "covered": 18, + "percent": 94.73684210526315 }, "regions": { - "count": 20, - "covered": 17, + "count": 18, + "covered": 15, "notcovered": 3, - "percent": 85 + "percent": 83.33333333333334 } } } @@ -41,15 +41,15 @@ "percent": 100 }, "lines": { - "count": 20, - "covered": 19, - "percent": 95 + "count": 19, + "covered": 18, + "percent": 94.73684210526315 }, "regions": { - "count": 20, - "covered": 17, + "count": 18, + "covered": 15, "notcovered": 3, - "percent": 85 + "percent": 83.33333333333334 } } } diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.while.json b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.while.json index 27862087ed5..339c6555668 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.while.json +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.while.json @@ -21,10 +21,10 @@ "percent": 75 }, "regions": { - "count": 5, + "count": 4, "covered": 3, - "notcovered": 2, - "percent": 60 + "notcovered": 1, + "percent": 75 } } } @@ -46,10 +46,10 @@ "percent": 75 }, "regions": { - "count": 5, + "count": 4, "covered": 3, - "notcovered": 2, - "percent": 60 + "notcovered": 1, + "percent": 75 } } } diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.while_early_return.json b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.while_early_return.json index 555ac745d53..a116a91a60a 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.while_early_return.json +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_export_coverage.while_early_return.json @@ -16,15 +16,15 @@ "percent": 100 }, "lines": { - "count": 18, + "count": 17, "covered": 15, - "percent": 83.33333333333334 + "percent": 88.23529411764706 }, "regions": { - "count": 11, + "count": 10, "covered": 8, - "notcovered": 3, - "percent": 72.72727272727273 + "notcovered": 2, + "percent": 80 } } } @@ -41,15 +41,15 @@ "percent": 100 }, "lines": { - "count": 18, + "count": 17, "covered": 15, - "percent": 83.33333333333334 + "percent": 88.23529411764706 }, "regions": { - "count": 11, + "count": 10, "covered": 8, - "notcovered": 3, - "percent": 72.72727272727273 + "notcovered": 2, + "percent": 80 } } } diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.lazy_boolean.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.lazy_boolean.txt index f01f69f2496..1b503033911 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.lazy_boolean.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.lazy_boolean.txt @@ -50,7 +50,7 @@ 47| 0| { 48| 0| c = 400 49| 0| ; - 50| 1| } + 50| 0| } 51| | 52| 1| if !is_true { 53| 0| a = 2; @@ -60,6 +60,6 @@ 57| 1| b = 30; 58| 1| } else { 59| 0| c = 400; - 60| 1| } + 60| 0| } 61| 1|} diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.nested_loops.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.nested_loops.txt index e0545c76f78..c9f373bf6a7 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.nested_loops.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.nested_loops.txt @@ -19,8 +19,8 @@ 19| 0| a -= 2; 20| 0| } 21| 2| } - 22| 3| } + 22| 2| } 23| 0| countdown -= 1; - 24| 1| } + 24| 0| } 25| 1|} diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.try_error_result.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.try_error_result.txt index 05d72d0de46..c43b492db60 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.try_error_result.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.try_error_result.txt @@ -6,7 +6,7 @@ 6| 1| Err(()) 7| | } else { 8| 5| Ok(()) - 9| 1| } + 9| | } 10| 6|} 11| | 12| |fn main() -> Result<(),()> { @@ -31,7 +31,7 @@ 31| 5| call(/*return_error=*/ false)?; ^0 32| 5| } - 33| 6| } + 33| 5| } 34| 0| Ok(()) 35| 2|} diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.while_early_return.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.while_early_return.txt index 2e0c4022bed..e5c5b05a6fc 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.while_early_return.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage.while_early_return.txt @@ -24,7 +24,7 @@ 24| | else 25| | { 26| 1| Err(1) - 27| 0| } + 27| | } 28| | ; 29| | } 30| 6| countdown diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.drop_trait.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.drop_trait.txt index e416a84820a..124a01af342 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.drop_trait.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.drop_trait.txt @@ -4,14 +4,13 @@ Counter in file 0 15:9 -> 17:42, #1 Counter in file 0 19:8 -> 19:12, (#1 + 0) Counter in file 0 20:9 -> 21:22, #2 Counter in file 0 27:1 -> 27:2, #4 -Counter in file 0 27:1 -> 27:2, (#2 + 0) Emitting segments for file: ../coverage/drop_trait.rs Combined regions: 9:24 -> 11:6 (count=2) 15:9 -> 17:42 (count=1) 19:8 -> 19:12 (count=1) 20:9 -> 21:22 (count=1) - 27:1 -> 27:2 (count=2) + 27:1 -> 27:2 (count=1) Segment at 9:24 (count = 2), RegionEntry Segment at 11:6 (count = 0), Skipped Segment at 15:9 (count = 1), RegionEntry @@ -20,5 +19,5 @@ Segment at 19:8 (count = 1), RegionEntry Segment at 19:12 (count = 0), Skipped Segment at 20:9 (count = 1), RegionEntry Segment at 21:22 (count = 0), Skipped -Segment at 27:1 (count = 2), RegionEntry +Segment at 27:1 (count = 1), RegionEntry Segment at 27:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.generics.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.generics.txt index 9e33b48fc29..a0e9146035e 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.generics.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.generics.txt @@ -5,7 +5,6 @@ Counter in file 0 23:9 -> 28:28, #1 Counter in file 0 30:8 -> 30:12, (#1 + 0) Counter in file 0 31:9 -> 32:22, #2 Counter in file 0 38:1 -> 38:2, #4 -Counter in file 0 38:1 -> 38:2, (#2 + 0) Counter in file 0 10:49 -> 12:6, #1 Counter in file 0 10:49 -> 12:6, #1 Emitting segments for file: ../coverage/generics.rs @@ -15,7 +14,7 @@ Combined regions: 23:9 -> 28:28 (count=1) 30:8 -> 30:12 (count=1) 31:9 -> 32:22 (count=1) - 38:1 -> 38:2 (count=2) + 38:1 -> 38:2 (count=1) Segment at 10:49 (count = 3), RegionEntry Segment at 12:6 (count = 0), Skipped Segment at 17:24 (count = 2), RegionEntry @@ -26,7 +25,7 @@ Segment at 30:8 (count = 1), RegionEntry Segment at 30:12 (count = 0), Skipped Segment at 31:9 (count = 1), RegionEntry Segment at 32:22 (count = 0), Skipped -Segment at 38:1 (count = 2), RegionEntry +Segment at 38:1 (count = 1), RegionEntry Segment at 38:2 (count = 0), Skipped Emitting segments for function: _RNvMCs4fqI2P2rA04_8genericsINtB2_8FireworkdE12set_strengthB2_ Combined regions: diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.if_else.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.if_else.txt index a620bf8ae4a..9406b6a269d 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.if_else.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.if_else.txt @@ -2,22 +2,18 @@ Args: /usr/local/google/home/richkadel/rust/build/x86_64-unknown-linux-gnu/llvm/ Counter in file 0 7:9 -> 11:16, #1 Counter in file 0 12:5 -> 17:6, #2 Counter in file 0 20:9 -> 22:16, #3 -Counter in file 0 23:6 -> 23:7, (#2 + 0) Counter in file 0 26:9 -> 26:16, #4 Counter in file 0 27:5 -> 32:6, #5 Counter in file 0 34:5 -> 39:6, #6 -Counter in file 0 39:6 -> 39:7, (#5 + 0) Counter in file 0 40:1 -> 40:2, #7 Emitting segments for file: ../coverage/if_else.rs Combined regions: 7:9 -> 11:16 (count=1) 12:5 -> 17:6 (count=1) 20:9 -> 22:16 (count=0) - 23:6 -> 23:7 (count=1) 26:9 -> 26:16 (count=1) 27:5 -> 32:6 (count=1) 34:5 -> 39:6 (count=0) - 39:6 -> 39:7 (count=1) 40:1 -> 40:2 (count=1) Segment at 7:9 (count = 1), RegionEntry Segment at 11:16 (count = 0), Skipped @@ -25,14 +21,11 @@ Segment at 12:5 (count = 1), RegionEntry Segment at 17:6 (count = 0), Skipped Segment at 20:9 (count = 0), RegionEntry Segment at 22:16 (count = 0), Skipped -Segment at 23:6 (count = 1), RegionEntry -Segment at 23:7 (count = 0), Skipped Segment at 26:9 (count = 1), RegionEntry Segment at 26:16 (count = 0), Skipped Segment at 27:5 (count = 1), RegionEntry Segment at 32:6 (count = 0), Skipped Segment at 34:5 (count = 0), RegionEntry -Segment at 39:6 (count = 1), RegionEntry -Segment at 39:7 (count = 0), Skipped +Segment at 39:6 (count = 0), Skipped Segment at 40:1 (count = 1), RegionEntry Segment at 40:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.lazy_boolean.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.lazy_boolean.txt index 0f54f4904b0..c95275c6223 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.lazy_boolean.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.lazy_boolean.txt @@ -29,14 +29,12 @@ Counter in file 0 38:6 -> 38:7, #22 Counter in file 0 41:9 -> 41:16, #23 Counter in file 0 42:5 -> 45:6, #24 Counter in file 0 47:5 -> 50:6, #25 -Counter in file 0 50:6 -> 50:7, (#24 + 0) Counter in file 0 52:8 -> 52:16, #26 Counter in file 0 52:17 -> 54:6, #27 Counter in file 0 54:6 -> 54:7, #28 Counter in file 0 56:8 -> 56:15, #29 Counter in file 0 56:16 -> 58:6, #30 Counter in file 0 58:12 -> 60:6, #31 -Counter in file 0 60:6 -> 60:7, (#30 + 0) Counter in file 0 61:1 -> 61:2, #32 Emitting segments for file: ../coverage/lazy_boolean.rs Combined regions: @@ -66,14 +64,12 @@ Combined regions: 41:9 -> 41:16 (count=1) 42:5 -> 45:6 (count=1) 47:5 -> 50:6 (count=0) - 50:6 -> 50:7 (count=1) 52:8 -> 52:16 (count=1) 52:17 -> 54:6 (count=0) 54:6 -> 54:7 (count=1) 56:8 -> 56:15 (count=1) 56:16 -> 58:6 (count=1) 58:12 -> 60:6 (count=0) - 60:6 -> 60:7 (count=1) 61:1 -> 61:2 (count=1) Segment at 7:9 (count = 1), RegionEntry Segment at 9:42 (count = 0), Skipped @@ -120,8 +116,7 @@ Segment at 41:16 (count = 0), Skipped Segment at 42:5 (count = 1), RegionEntry Segment at 45:6 (count = 0), Skipped Segment at 47:5 (count = 0), RegionEntry -Segment at 50:6 (count = 1), RegionEntry -Segment at 50:7 (count = 0), Skipped +Segment at 50:6 (count = 0), Skipped Segment at 52:8 (count = 1), RegionEntry Segment at 52:16 (count = 0), Skipped Segment at 52:17 (count = 0), RegionEntry @@ -132,7 +127,6 @@ Segment at 56:15 (count = 0), Skipped Segment at 56:16 (count = 1), RegionEntry Segment at 58:6 (count = 0), Skipped Segment at 58:12 (count = 0), RegionEntry -Segment at 60:6 (count = 1), RegionEntry -Segment at 60:7 (count = 0), Skipped +Segment at 60:6 (count = 0), Skipped Segment at 61:1 (count = 1), RegionEntry Segment at 61:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.loops_and_branches.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.loops_and_branches.txt index ca3b1d61343..3e0bc6e4959 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.loops_and_branches.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.loops_and_branches.txt @@ -7,7 +7,6 @@ Counter in file 0 15:31 -> 15:32, #8 Counter in file 0 17:10 -> 17:11, #10 Counter in file 0 18:9 -> 18:15, #11 Counter in file 0 19:5 -> 19:6, #12 -Counter in file 0 19:5 -> 19:6, (#8 + 0) Counter in file 0 22:11 -> 25:2, #1 Emitting segments for file: ../coverage/loops_and_branches.rs Combined regions: diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.nested_loops.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.nested_loops.txt index 9c9c46a0834..a19f6253316 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.nested_loops.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.nested_loops.txt @@ -14,10 +14,8 @@ Counter in file 0 17:21 -> 17:33, #10 Counter in file 0 19:21 -> 21:14, #11 Counter in file 0 21:14 -> 21:15, #12 Counter in file 0 22:10 -> 22:11, #13 -Counter in file 0 22:10 -> 22:11, (#3 + 0) Counter in file 0 23:9 -> 23:23, #14 Counter in file 0 24:6 -> 24:7, #15 -Counter in file 0 24:6 -> 24:7, (#1 + 0) Counter in file 0 25:1 -> 25:2, #16 Emitting segments for file: ../coverage/nested_loops.rs Combined regions: @@ -35,9 +33,9 @@ Combined regions: 17:21 -> 17:33 (count=1) 19:21 -> 21:14 (count=0) 21:14 -> 21:15 (count=2) - 22:10 -> 22:11 (count=3) + 22:10 -> 22:11 (count=2) 23:9 -> 23:23 (count=0) - 24:6 -> 24:7 (count=1) + 24:6 -> 24:7 (count=0) 25:1 -> 25:2 (count=1) Segment at 2:9 (count = 1), RegionEntry Segment at 3:27 (count = 0), Skipped @@ -66,11 +64,11 @@ Segment at 17:33 (count = 0), Skipped Segment at 19:21 (count = 0), RegionEntry Segment at 21:14 (count = 2), RegionEntry Segment at 21:15 (count = 0), Skipped -Segment at 22:10 (count = 3), RegionEntry +Segment at 22:10 (count = 2), RegionEntry Segment at 22:11 (count = 0), Skipped Segment at 23:9 (count = 0), RegionEntry Segment at 23:23 (count = 0), Skipped -Segment at 24:6 (count = 1), RegionEntry +Segment at 24:6 (count = 0), RegionEntry Segment at 24:7 (count = 0), Skipped Segment at 25:1 (count = 1), RegionEntry Segment at 25:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.partial_eq_counter_without_region.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.partial_eq_counter_without_region.txt index dbcaa57b4b2..a444ea44901 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.partial_eq_counter_without_region.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.partial_eq_counter_without_region.txt @@ -2,8 +2,7 @@ Args: /usr/local/google/home/richkadel/rust/build/x86_64-unknown-linux-gnu/llvm/ Counter in file 0 4:39 -> 4:49, #1 Counter in file 0 4:39 -> 4:49, #2 Counter in file 0 4:39 -> 4:49, #3 -Counter in file 0 4:39 -> 4:49, #4 -Counter in file 0 4:48 -> 4:49, #5 +Counter in file 0 4:48 -> 4:49, #4 Counter in file 0 8:5 -> 8:17, #1 Counter in file 0 21:11 -> 26:2, #1 Counter in file 0 4:39 -> 4:40, #1 @@ -20,8 +19,7 @@ Counter in file 0 4:32 -> 4:33, #5 Counter in file 0 4:51 -> 4:54, #1 Counter in file 0 4:51 -> 4:54, #2 Counter in file 0 4:51 -> 4:54, #3 -Counter in file 0 4:51 -> 4:54, #4 -Counter in file 0 4:53 -> 4:54, #5 +Counter in file 0 4:53 -> 4:54, #4 Counter in file 0 13:9 -> 18:6, #1 Counter in file 0 7:5 -> 7:6, #1 Counter in file 0 4:39 -> 4:40, #1 diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.try_error_result.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.try_error_result.txt index 10fc52354b9..25e1c8930bc 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.try_error_result.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.try_error_result.txt @@ -10,21 +10,18 @@ Counter in file 0 31:42 -> 31:43, #8 Counter in file 0 32:10 -> 32:11, #9 Counter in file 0 32:10 -> 32:11, #10 Counter in file 0 33:6 -> 33:7, #11 -Counter in file 0 33:6 -> 33:7, (#1 + 0) Counter in file 0 34:5 -> 34:11, #12 Counter in file 0 35:1 -> 35:2, #13 Counter in file 0 35:1 -> 35:2, #14 Counter in file 0 5:8 -> 5:20, #1 Counter in file 0 6:9 -> 6:16, #2 Counter in file 0 8:9 -> 8:15, #3 -Counter in file 0 9:6 -> 9:7, (#2 + 0) Counter in file 0 10:1 -> 10:2, #4 Emitting segments for file: ../coverage/try_error_result.rs Combined regions: 5:8 -> 5:20 (count=6) 6:9 -> 6:16 (count=1) 8:9 -> 8:15 (count=5) - 9:6 -> 9:7 (count=1) 10:1 -> 10:2 (count=6) 13:9 -> 14:23 (count=1) 17:9 -> 17:10 (count=6) @@ -35,7 +32,7 @@ Combined regions: 31:13 -> 31:42 (count=5) 31:42 -> 31:43 (count=0) 32:10 -> 32:11 (count=5) - 33:6 -> 33:7 (count=6) + 33:6 -> 33:7 (count=5) 34:5 -> 34:11 (count=0) 35:1 -> 35:2 (count=2) Segment at 5:8 (count = 6), RegionEntry @@ -44,8 +41,6 @@ Segment at 6:9 (count = 1), RegionEntry Segment at 6:16 (count = 0), Skipped Segment at 8:9 (count = 5), RegionEntry Segment at 8:15 (count = 0), Skipped -Segment at 9:6 (count = 1), RegionEntry -Segment at 9:7 (count = 0), Skipped Segment at 10:1 (count = 6), RegionEntry Segment at 10:2 (count = 0), Skipped Segment at 13:9 (count = 1), RegionEntry @@ -64,7 +59,7 @@ Segment at 31:42 (count = 0), RegionEntry Segment at 31:43 (count = 0), Skipped Segment at 32:10 (count = 5), RegionEntry Segment at 32:11 (count = 0), Skipped -Segment at 33:6 (count = 6), RegionEntry +Segment at 33:6 (count = 5), RegionEntry Segment at 33:7 (count = 0), Skipped Segment at 34:5 (count = 0), RegionEntry Segment at 34:11 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.while.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.while.txt index 1aad1a3c83b..b75a88b2e92 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.while.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.while.txt @@ -2,21 +2,18 @@ Args: /usr/local/google/home/richkadel/rust/build/x86_64-unknown-linux-gnu/llvm/ Counter in file 0 2:9 -> 2:16, #1 Counter in file 0 3:11 -> 3:20, #2 Counter in file 0 3:21 -> 4:6, #3 -Counter in file 0 4:6 -> 4:7, (#3 + 0) Counter in file 0 5:1 -> 5:2, #4 Emitting segments for file: ../coverage/while.rs Combined regions: 2:9 -> 2:16 (count=1) 3:11 -> 3:20 (count=1) 3:21 -> 4:6 (count=0) - 4:6 -> 4:7 (count=0) 5:1 -> 5:2 (count=1) Segment at 2:9 (count = 1), RegionEntry Segment at 2:16 (count = 0), Skipped Segment at 3:11 (count = 1), RegionEntry Segment at 3:20 (count = 0), Skipped Segment at 3:21 (count = 0), RegionEntry -Segment at 4:6 (count = 0), RegionEntry -Segment at 4:7 (count = 0), Skipped +Segment at 4:6 (count = 0), Skipped Segment at 5:1 (count = 1), RegionEntry Segment at 5:2 (count = 0), Skipped diff --git a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.while_early_return.txt b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.while_early_return.txt index 7c24ea22d67..908613018a4 100644 --- a/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.while_early_return.txt +++ b/src/test/run-make-fulldeps/coverage-reports-deadcode/expected_show_coverage_counters.while_early_return.txt @@ -5,7 +5,6 @@ Counter in file 0 12:13 -> 14:14, #3 Counter in file 0 18:21 -> 20:22, #4 Counter in file 0 22:21 -> 22:27, #5 Counter in file 0 26:21 -> 26:27, #6 -Counter in file 0 27:18 -> 27:19, (#5 + 0) Counter in file 0 30:9 -> 32:10, #7 Counter in file 0 35:5 -> 35:11, #8 Counter in file 0 36:1 -> 36:2, #9 @@ -18,7 +17,6 @@ Combined regions: 18:21 -> 20:22 (count=1) 22:21 -> 22:27 (count=0) 26:21 -> 26:27 (count=1) - 27:18 -> 27:19 (count=0) 30:9 -> 32:10 (count=6) 35:5 -> 35:11 (count=0) 36:1 -> 36:2 (count=2) @@ -34,8 +32,6 @@ Segment at 22:21 (count = 0), RegionEntry Segment at 22:27 (count = 0), Skipped Segment at 26:21 (count = 1), RegionEntry Segment at 26:27 (count = 0), Skipped -Segment at 27:18 (count = 0), RegionEntry -Segment at 27:19 (count = 0), Skipped Segment at 30:9 (count = 6), RegionEntry Segment at 32:10 (count = 0), Skipped Segment at 35:5 (count = 0), RegionEntry diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.lazy_boolean/lazy_boolean.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.lazy_boolean/lazy_boolean.main.-------.InstrumentCoverage.0.html index 636341055dc..cd23e4220cf 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.lazy_boolean/lazy_boolean.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.lazy_boolean/lazy_boolean.main.-------.InstrumentCoverage.0.html @@ -188,32 +188,32 @@ ; }⦉@29@28,30⦊⦉@28,30 +47:5-50:6: @29[1]: _42 = const ()"> }⦉@29 - if if @31⦊!is_true⦉@31 @31⦊!is_true⦉@31 @32,34⦊{ - a = 2; - }⦉@32,34@33⦊⦉@33 +54:6-54:6: @34.Goto: goto -> bb35"> }⦉@32,34@33⦊⦉@33 - if @35⦊is_true⦉@35 if @35⦊is_true⦉@35 @36,38⦊{ - b = 30; - }⦉@36,38 else }⦉@36,38 else @37⦊{ - c = 400; - }⦉@37@36,38⦊⦉@36,38 + }⦉@37 }@39⦊⦉@39 diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.loops_and_branches/loops_and_branches.{impl#0}-fmt.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.loops_and_branches/loops_and_branches.{impl#0}-fmt.-------.InstrumentCoverage.0.html index 1b9767506f2..2164a565e22 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.loops_and_branches/loops_and_branches.{impl#0}-fmt.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.loops_and_branches/loops_and_branches.{impl#0}-fmt.-------.InstrumentCoverage.0.html @@ -89,6 +89,6 @@ }⦉@2@15⦊⦉@15 @21⦊Ok(())⦉@21 - }@16,18,19,20⦊⦉@16,18,19,20@22⦊⦉@22 + }@22⦊⦉@22 diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html index 042845b70cc..b30a5a9f81e 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html @@ -117,9 +117,9 @@ 21:14-21:14: @29.Goto: goto -> bb30"> } }⦉@29@23⦊⦉@23 - }@6,8,9⦊⦉@6,8,9@30⦊⦉@30 - @32⦊countdown -= 1⦉@32; - }@0,1,2,3⦊⦉@0,1,2,3@7⦊⦉@7 + }@30⦊⦉@30 + @32⦊countdown -= 1⦉@32; + }@7⦊⦉@7 }@33⦊⦉@33 diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.partial_eq_counter_without_region/partial_eq_counter_without_region.{impl#1}-cmp.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.partial_eq_counter_without_region/partial_eq_counter_without_region.{impl#1}-cmp.-------.InstrumentCoverage.0.html index a39772288a3..469a00f6206 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.partial_eq_counter_without_region/partial_eq_counter_without_region.{impl#1}-cmp.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.partial_eq_counter_without_region/partial_eq_counter_without_region.{impl#1}-cmp.-------.InstrumentCoverage.0.html @@ -60,11 +60,7 @@
@14⦊@11,12⦊@10⦊@13⦊Ord⦉@13⦉@10@11,12⦊@13⦊Ord⦉@13⦉@11,12⦉@14@15⦊⦉@15
diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.partial_eq_counter_without_region/partial_eq_counter_without_region.{impl#2}-partial_cmp.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.partial_eq_counter_without_region/partial_eq_counter_without_region.{impl#2}-partial_cmp.-------.InstrumentCoverage.0.html index 2c03e967eeb..feae343bbbb 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.partial_eq_counter_without_region/partial_eq_counter_without_region.{impl#2}-partial_cmp.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.partial_eq_counter_without_region/partial_eq_counter_without_region.{impl#2}-partial_cmp.-------.InstrumentCoverage.0.html @@ -61,11 +61,7 @@
@17⦊@14,15⦊@12⦊@16⦊PartialOrd⦉@16⦉@12@14,15⦊@16⦊PartialOrd⦉@16⦉@14,15⦉@17@18⦊⦉@18
diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.tight_infinite_loop/tight_infinite_loop.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.tight_infinite_loop/tight_infinite_loop.main.-------.InstrumentCoverage.0.html index db08315baa6..cc5e54f87ce 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.tight_infinite_loop/tight_infinite_loop.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.tight_infinite_loop/tight_infinite_loop.main.-------.InstrumentCoverage.0.html @@ -63,8 +63,8 @@ if @0⦊false⦉@0 { @4,5⦊loop {}⦉@4,5@1,3⦊⦉@1,3@4,5⦊⦉@4,5 +3:14-3:16: @5[0]: _3 = const ()">@4,5⦊loop {}⦉@4,5
@1,3⦊⦉@1,3 } -}@2⦊⦉@2 +}@2⦊⦉@2 diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html index 428c6fadc27..c273c8c88e6 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html @@ -107,9 +107,9 @@ 31:42-31:43: @26[4]: _36 = _33 31:42-31:43: @26.Call: _35 = <() as From<()>>::from(move _36) -> [return: bb27, unwind: bb32]">@24,26,27,28⦊?⦉@24,26,27,28; }@15⦊⦉@15@23⦊⦉@23 - }@0,1⦊⦉@0,1@29⦊⦉@29 - }@29⦊⦉@29 + @5⦊Ok(())⦉@5 -}@30⦊⦉@30@31⦊⦉@31 +}@30⦊⦉@30@31⦊⦉@31 diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.while/while.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.while/while.main.-------.InstrumentCoverage.0.html index 5c49ec19707..49b8bb5520d 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.while/while.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.while/while.main.-------.InstrumentCoverage.0.html @@ -65,7 +65,7 @@ while @1,2⦊num >= 10⦉@1,2 @3,5⦊{ - }⦉@3,5@3,5⦊⦉@3,5 + }⦉@3,5 }@4⦊⦉@4 diff --git a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.while_early_return/while_early_return.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.while_early_return/while_early_return.main.-------.InstrumentCoverage.0.html index be674dc7d38..3d75e61b800 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.while_early_return/while_early_return.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-base/expected_mir_dump.while_early_return/while_early_return.main.-------.InstrumentCoverage.0.html @@ -102,16 +102,16 @@ else { @10⦊Err(1)⦉@10 - }@9,11⦊⦉@9,11 + } ; } - @12⦊countdown - -= - 1⦉@12 + @12⦊countdown + -= + 1⦉@12 ; } - @4⦊Ok(())⦉@4 -}@13⦊⦉@13@14⦊⦉@14 +}@13⦊⦉@13@14⦊⦉@14 diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.lazy_boolean/lazy_boolean.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.lazy_boolean/lazy_boolean.main.-------.InstrumentCoverage.0.html index 636341055dc..cd23e4220cf 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.lazy_boolean/lazy_boolean.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.lazy_boolean/lazy_boolean.main.-------.InstrumentCoverage.0.html @@ -188,32 +188,32 @@ ; }⦉@29@28,30⦊⦉@28,30 +47:5-50:6: @29[1]: _42 = const ()"> }⦉@29 - if if @31⦊!is_true⦉@31 @31⦊!is_true⦉@31 @32,34⦊{ - a = 2; - }⦉@32,34@33⦊⦉@33 +54:6-54:6: @34.Goto: goto -> bb35"> }⦉@32,34@33⦊⦉@33 - if @35⦊is_true⦉@35 if @35⦊is_true⦉@35 @36,38⦊{ - b = 30; - }⦉@36,38 else }⦉@36,38 else @37⦊{ - c = 400; - }⦉@37@36,38⦊⦉@36,38 + }⦉@37 }@39⦊⦉@39 diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.loops_and_branches/loops_and_branches.{impl#0}-fmt.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.loops_and_branches/loops_and_branches.{impl#0}-fmt.-------.InstrumentCoverage.0.html index 1b9767506f2..2164a565e22 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.loops_and_branches/loops_and_branches.{impl#0}-fmt.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.loops_and_branches/loops_and_branches.{impl#0}-fmt.-------.InstrumentCoverage.0.html @@ -89,6 +89,6 @@ }⦉@2@15⦊⦉@15 @21⦊Ok(())⦉@21 - }@16,18,19,20⦊⦉@16,18,19,20@22⦊⦉@22 + }@22⦊⦉@22 diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html index 042845b70cc..b30a5a9f81e 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.nested_loops/nested_loops.main.-------.InstrumentCoverage.0.html @@ -117,9 +117,9 @@ 21:14-21:14: @29.Goto: goto -> bb30"> } }⦉@29@23⦊⦉@23 - }@6,8,9⦊⦉@6,8,9@30⦊⦉@30 - @32⦊countdown -= 1⦉@32; - }@0,1,2,3⦊⦉@0,1,2,3@7⦊⦉@7 + }@30⦊⦉@30 + @32⦊countdown -= 1⦉@32; + }@7⦊⦉@7 }@33⦊⦉@33 diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq_counter_without_region/partial_eq_counter_without_region.{impl#1}-cmp.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq_counter_without_region/partial_eq_counter_without_region.{impl#1}-cmp.-------.InstrumentCoverage.0.html index a39772288a3..469a00f6206 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq_counter_without_region/partial_eq_counter_without_region.{impl#1}-cmp.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq_counter_without_region/partial_eq_counter_without_region.{impl#1}-cmp.-------.InstrumentCoverage.0.html @@ -60,11 +60,7 @@
@14⦊@11,12⦊@10⦊@13⦊Ord⦉@13⦉@10@11,12⦊@13⦊Ord⦉@13⦉@11,12⦉@14@15⦊⦉@15
diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq_counter_without_region/partial_eq_counter_without_region.{impl#2}-partial_cmp.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq_counter_without_region/partial_eq_counter_without_region.{impl#2}-partial_cmp.-------.InstrumentCoverage.0.html index 2c03e967eeb..feae343bbbb 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq_counter_without_region/partial_eq_counter_without_region.{impl#2}-partial_cmp.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.partial_eq_counter_without_region/partial_eq_counter_without_region.{impl#2}-partial_cmp.-------.InstrumentCoverage.0.html @@ -61,11 +61,7 @@
@17⦊@14,15⦊@12⦊@16⦊PartialOrd⦉@16⦉@12@14,15⦊@16⦊PartialOrd⦉@16⦉@14,15⦉@17@18⦊⦉@18
diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.tight_infinite_loop/tight_infinite_loop.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.tight_infinite_loop/tight_infinite_loop.main.-------.InstrumentCoverage.0.html index db08315baa6..cc5e54f87ce 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.tight_infinite_loop/tight_infinite_loop.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.tight_infinite_loop/tight_infinite_loop.main.-------.InstrumentCoverage.0.html @@ -63,8 +63,8 @@ if @0⦊false⦉@0 { @4,5⦊loop {}⦉@4,5@1,3⦊⦉@1,3@4,5⦊⦉@4,5 +3:14-3:16: @5[0]: _3 = const ()">@4,5⦊loop {}⦉@4,5
@1,3⦊⦉@1,3 } -}@2⦊⦉@2 +}@2⦊⦉@2 diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html index 428c6fadc27..c273c8c88e6 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.try_error_result/try_error_result.main.-------.InstrumentCoverage.0.html @@ -107,9 +107,9 @@ 31:42-31:43: @26[4]: _36 = _33 31:42-31:43: @26.Call: _35 = <() as From<()>>::from(move _36) -> [return: bb27, unwind: bb32]">@24,26,27,28⦊?⦉@24,26,27,28; }@15⦊⦉@15@23⦊⦉@23 - }@0,1⦊⦉@0,1@29⦊⦉@29 - }@29⦊⦉@29 + @5⦊Ok(())⦉@5 -}@30⦊⦉@30@31⦊⦉@31 +}@30⦊⦉@30@31⦊⦉@31 diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.while/while.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.while/while.main.-------.InstrumentCoverage.0.html index 5c49ec19707..49b8bb5520d 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.while/while.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.while/while.main.-------.InstrumentCoverage.0.html @@ -65,7 +65,7 @@ while @1,2⦊num >= 10⦉@1,2 @3,5⦊{ - }⦉@3,5@3,5⦊⦉@3,5 + }⦉@3,5 }@4⦊⦉@4 diff --git a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.while_early_return/while_early_return.main.-------.InstrumentCoverage.0.html b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.while_early_return/while_early_return.main.-------.InstrumentCoverage.0.html index be674dc7d38..3d75e61b800 100644 --- a/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.while_early_return/while_early_return.main.-------.InstrumentCoverage.0.html +++ b/src/test/run-make-fulldeps/coverage-spanview-deadcode/expected_mir_dump.while_early_return/while_early_return.main.-------.InstrumentCoverage.0.html @@ -102,16 +102,16 @@ else { @10⦊Err(1)⦉@10 - }@9,11⦊⦉@9,11 + } ; } - @12⦊countdown - -= - 1⦉@12 + @12⦊countdown + -= + 1⦉@12 ; } - @4⦊Ok(())⦉@4 -}@13⦊⦉@13@14⦊⦉@14 +}@13⦊⦉@13@14⦊⦉@14