Implemented CoverageGraph of BasicCoverageBlocks
This commit is contained in:
parent
c7ae4c2cb6
commit
b5020648fe
61 changed files with 565 additions and 495 deletions
|
@ -1,4 +1,4 @@
|
||||||
use super::graph::BasicCoverageBlocks;
|
use super::graph::CoverageGraph;
|
||||||
use super::spans::CoverageSpan;
|
use super::spans::CoverageSpan;
|
||||||
|
|
||||||
use crate::util::pretty;
|
use crate::util::pretty;
|
||||||
|
@ -11,7 +11,7 @@ use rustc_middle::ty::TyCtxt;
|
||||||
pub(crate) fn dump_coverage_spanview(
|
pub(crate) fn dump_coverage_spanview(
|
||||||
tcx: TyCtxt<'tcx>,
|
tcx: TyCtxt<'tcx>,
|
||||||
mir_body: &mir::Body<'tcx>,
|
mir_body: &mir::Body<'tcx>,
|
||||||
basic_coverage_blocks: &BasicCoverageBlocks,
|
basic_coverage_blocks: &CoverageGraph,
|
||||||
pass_name: &str,
|
pass_name: &str,
|
||||||
coverage_spans: &Vec<CoverageSpan>,
|
coverage_spans: &Vec<CoverageSpan>,
|
||||||
) {
|
) {
|
||||||
|
@ -28,20 +28,20 @@ pub(crate) fn dump_coverage_spanview(
|
||||||
.expect("Unexpected IO error dumping coverage spans as HTML");
|
.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(
|
fn span_viewables(
|
||||||
tcx: TyCtxt<'tcx>,
|
tcx: TyCtxt<'tcx>,
|
||||||
mir_body: &mir::Body<'tcx>,
|
mir_body: &mir::Body<'tcx>,
|
||||||
basic_coverage_blocks: &BasicCoverageBlocks,
|
basic_coverage_blocks: &CoverageGraph,
|
||||||
coverage_spans: &Vec<CoverageSpan>,
|
coverage_spans: &Vec<CoverageSpan>,
|
||||||
) -> Vec<SpanViewable> {
|
) -> Vec<SpanViewable> {
|
||||||
let mut span_viewables = Vec::new();
|
let mut span_viewables = Vec::new();
|
||||||
for coverage_span in coverage_spans {
|
for coverage_span in coverage_spans {
|
||||||
let tooltip = coverage_span.format_coverage_statements(tcx, mir_body);
|
let tooltip = coverage_span.format_coverage_statements(tcx, mir_body);
|
||||||
let CoverageSpan { span, bcb_leader_bb: bb, .. } = coverage_span;
|
let CoverageSpan { span, bcb, .. } = coverage_span;
|
||||||
let bcb = &basic_coverage_blocks[*bb];
|
let bcb_data = &basic_coverage_blocks[*bcb];
|
||||||
let id = bcb.id();
|
let id = bcb_data.id();
|
||||||
let leader_bb = bcb.leader_bb();
|
let leader_bb = bcb_data.leader_bb();
|
||||||
span_viewables.push(SpanViewable { bb: leader_bb, span: *span, id, tooltip });
|
span_viewables.push(SpanViewable { bb: leader_bb, span: *span, id, tooltip });
|
||||||
}
|
}
|
||||||
span_viewables
|
span_viewables
|
||||||
|
|
|
@ -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::bit_set::BitSet;
|
||||||
use rustc_index::vec::IndexVec;
|
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 = ",";
|
const ID_SEPARATOR: &str = ",";
|
||||||
|
|
||||||
/// A BasicCoverageBlock (BCB) represents the maximal-length sequence of CFG (MIR) BasicBlocks
|
/// A coverage-specific simplification of the MIR control flow graph (CFG). The `CoverageGraph`s
|
||||||
/// without conditional branches.
|
/// 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
|
||||||
/// The BCB allows coverage analysis to be performed on a simplified projection of the underlying
|
/// set of additional counters--if needed--to count incoming edges, if there are more than one.
|
||||||
/// MIR CFG, without altering the original CFG. Note that running the MIR `SimplifyCfg` transform,
|
/// (These "edge counters" are eventually converted into new MIR `BasicBlock`s.)
|
||||||
/// is not sufficient, and therefore not necessary, since the BCB-based CFG projection is a more
|
pub(crate) struct CoverageGraph {
|
||||||
/// aggressive simplification. For example:
|
bcbs: IndexVec<BasicCoverageBlock, BasicCoverageBlockData>,
|
||||||
///
|
bb_to_bcb: IndexVec<BasicBlock, Option<BasicCoverageBlock>>,
|
||||||
/// * The BCB CFG projection ignores (trims) branches not relevant to coverage, such as unwind-
|
pub successors: IndexVec<BasicCoverageBlock, Vec<BasicCoverageBlock>>,
|
||||||
/// related code that is injected by the Rust compiler but has no physical source code to
|
pub predecessors: IndexVec<BasicCoverageBlock, Vec<BasicCoverageBlock>>,
|
||||||
/// count. This also means a BasicBlock with a `Call` terminator can be merged into its
|
dominators: Option<Dominators<BasicCoverageBlock>>,
|
||||||
/// 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<BasicBlock>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BasicCoverageBlock {
|
impl CoverageGraph {
|
||||||
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::<Vec<_>>()
|
|
||||||
.join(ID_SEPARATOR)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) struct BasicCoverageBlocks {
|
|
||||||
vec: IndexVec<BasicBlock, Option<BasicCoverageBlock>>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl BasicCoverageBlocks {
|
|
||||||
pub fn from_mir(mir_body: &mir::Body<'tcx>) -> Self {
|
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::<Vec<_>>();
|
||||||
|
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 =
|
let mut basic_coverage_blocks =
|
||||||
BasicCoverageBlocks { vec: IndexVec::from_elem_n(None, mir_body.basic_blocks().len()) };
|
Self { bcbs, bb_to_bcb, successors, predecessors, dominators: None };
|
||||||
basic_coverage_blocks.extract_from_mir(mir_body);
|
let dominators = dominators::dominators(&basic_coverage_blocks);
|
||||||
|
basic_coverage_blocks.dominators = Some(dominators);
|
||||||
basic_coverage_blocks
|
basic_coverage_blocks
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn iter(&self) -> impl Iterator<Item = &BasicCoverageBlock> {
|
fn compute_basic_coverage_blocks(
|
||||||
self.vec.iter().filter_map(|bcb| bcb.as_ref())
|
mir_body: &mir::Body<'tcx>,
|
||||||
}
|
) -> (
|
||||||
|
IndexVec<BasicCoverageBlock, BasicCoverageBlockData>,
|
||||||
|
IndexVec<BasicBlock, Option<BasicCoverageBlock>>,
|
||||||
|
) {
|
||||||
|
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 {
|
// Walk the MIR CFG using a Preorder traversal, which starts from `START_BLOCK` and follows
|
||||||
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<dyn Iterator<Item = &BasicBlock> + '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
|
|
||||||
// each block terminator's `successors()`. Coverage spans must map to actual source code,
|
// 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.
|
// intentionally omits unwind paths.
|
||||||
let mut blocks = Vec::new();
|
let mir_cfg_without_unwind = ShortCircuitPreorder::new(&mir_body, bcb_filtered_successors);
|
||||||
for (bb, data) in cfg_without_unwind {
|
|
||||||
if let Some(last) = blocks.last() {
|
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];
|
let predecessors = &mir_body.predecessors()[bb];
|
||||||
if predecessors.len() > 1 || !predecessors.contains(last) {
|
if predecessors.len() > 1 || !predecessors.contains(last) {
|
||||||
// The `bb` has more than one _incoming_ edge, and should start its own
|
// The `bb` has more than one _incoming_ edge, and should start its own
|
||||||
// `BasicCoverageBlock`. (Note, the `blocks` vector does not yet include `bb`;
|
// `BasicCoverageBlockData`. (Note, the `basic_blocks` vector does not yet
|
||||||
// it contains a sequence of one or more sequential blocks with no intermediate
|
// include `bb`; it contains a sequence of one or more sequential basic_blocks
|
||||||
// branches in or out. Save these as a new `BasicCoverageBlock` before starting
|
// with no intermediate branches in or out. Save these as a new
|
||||||
// the new one.)
|
// `BasicCoverageBlockData` before starting the new one.)
|
||||||
self.add_basic_coverage_block(blocks.split_off(0));
|
Self::add_basic_coverage_block(
|
||||||
|
&mut bcbs,
|
||||||
|
&mut bb_to_bcb,
|
||||||
|
basic_blocks.split_off(0),
|
||||||
|
);
|
||||||
debug!(
|
debug!(
|
||||||
" because {}",
|
" because {}",
|
||||||
if predecessors.len() > 1 {
|
if predecessors.len() > 1 {
|
||||||
|
@ -157,27 +105,40 @@ impl BasicCoverageBlocks {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
blocks.push(bb);
|
basic_blocks.push(bb);
|
||||||
|
|
||||||
let term = data.terminator();
|
let term = data.terminator();
|
||||||
|
|
||||||
match term.kind {
|
match term.kind {
|
||||||
TerminatorKind::Return { .. }
|
TerminatorKind::Return { .. }
|
||||||
|
// FIXME(richkadel): Add test(s) for `Abort` coverage.
|
||||||
| TerminatorKind::Abort
|
| 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 { .. }
|
| TerminatorKind::Assert { .. }
|
||||||
|
// FIXME(richkadel): Add test(s) for `Yield` coverage, and confirm coverage is
|
||||||
|
// sensible for code using the `yield` keyword.
|
||||||
| TerminatorKind::Yield { .. }
|
| TerminatorKind::Yield { .. }
|
||||||
|
// FIXME(richkadel): Also add coverage tests using async/await, and threading.
|
||||||
|
|
||||||
| TerminatorKind::SwitchInt { .. } => {
|
| TerminatorKind::SwitchInt { .. } => {
|
||||||
// The `bb` has more than one _outgoing_ edge, or exits the function. Save the
|
// 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
|
// current sequence of `basic_blocks` gathered to this point, as a new
|
||||||
// `BasicCoverageBlock`.
|
// `BasicCoverageBlockData`.
|
||||||
self.add_basic_coverage_block(blocks.split_off(0));
|
Self::add_basic_coverage_block(
|
||||||
|
&mut bcbs,
|
||||||
|
&mut bb_to_bcb,
|
||||||
|
basic_blocks.split_off(0),
|
||||||
|
);
|
||||||
debug!(" because term.kind = {:?}", term.kind);
|
debug!(" because term.kind = {:?}", term.kind);
|
||||||
// Note that this condition is based on `TerminatorKind`, even though it
|
// Note that this condition is based on `TerminatorKind`, even though it
|
||||||
// theoretically boils down to `successors().len() != 1`; that is, either zero
|
// theoretically boils down to `successors().len() != 1`; that is, either zero
|
||||||
// (e.g., `Return`, `Abort`) or multiple successors (e.g., `SwitchInt`), but
|
// (e.g., `Return`, `Abort`) or multiple successors (e.g., `SwitchInt`), but
|
||||||
// since the Coverage graph (the BCB CFG projection) ignores things like unwind
|
// since the BCB CFG ignores things like unwind branches (which exist in the
|
||||||
// branches (which exist in the `Terminator`s `successors()` list) checking the
|
// `Terminator`s `successors()` list) checking the number of successors won't
|
||||||
// number of successors won't work.
|
// work.
|
||||||
}
|
}
|
||||||
TerminatorKind::Goto { .. }
|
TerminatorKind::Goto { .. }
|
||||||
| TerminatorKind::Resume
|
| TerminatorKind::Resume
|
||||||
|
@ -192,45 +153,222 @@ impl BasicCoverageBlocks {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !blocks.is_empty() {
|
if !basic_blocks.is_empty() {
|
||||||
// process any remaining blocks into a final `BasicCoverageBlock`
|
// process any remaining basic_blocks into a final `BasicCoverageBlockData`
|
||||||
self.add_basic_coverage_block(blocks.split_off(0));
|
Self::add_basic_coverage_block(&mut bcbs, &mut bb_to_bcb, basic_blocks.split_off(0));
|
||||||
debug!(" because the end of the CFG was reached while traversing");
|
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<BasicBlock>) {
|
fn add_basic_coverage_block(
|
||||||
let leader_bb = blocks[0];
|
bcbs: &mut IndexVec<BasicCoverageBlock, BasicCoverageBlockData>,
|
||||||
let bcb = BasicCoverageBlock { blocks };
|
bb_to_bcb: &mut IndexVec<BasicBlock, Option<BasicCoverageBlock>>,
|
||||||
debug!("adding BCB: {:?}", bcb);
|
basic_blocks: Vec<BasicBlock>,
|
||||||
self.vec[leader_bb] = Some(bcb);
|
) {
|
||||||
|
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<Item = (BasicCoverageBlock, &BasicCoverageBlockData)> {
|
||||||
|
self.bcbs.iter_enumerated()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn bcb_from_bb(&self, bb: BasicBlock) -> Option<BasicCoverageBlock> {
|
||||||
|
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<BasicCoverageBlock> {
|
||||||
|
self.dominators.as_ref().unwrap()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl std::ops::Index<BasicBlock> for BasicCoverageBlocks {
|
impl Index<BasicCoverageBlock> for CoverageGraph {
|
||||||
type Output = BasicCoverageBlock;
|
type Output = BasicCoverageBlockData;
|
||||||
|
|
||||||
fn index(&self, index: BasicBlock) -> &Self::Output {
|
#[inline]
|
||||||
self.vec[index].as_ref().expect("is_some if BasicBlock is a BasicCoverageBlock leader")
|
fn index(&self, index: BasicCoverageBlock) -> &BasicCoverageBlockData {
|
||||||
|
&self.bcbs[index]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl IndexMut<BasicCoverageBlock> 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<BcbSuccessors<'graph>>;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl graph::WithSuccessors for CoverageGraph {
|
||||||
|
#[inline]
|
||||||
|
fn successors(&self, node: Self::Node) -> <Self as GraphSuccessors<'_>>::Iter {
|
||||||
|
self.successors[node].iter().cloned()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl graph::GraphPredecessors<'graph> for CoverageGraph {
|
||||||
|
type Item = BasicCoverageBlock;
|
||||||
|
type Iter = std::vec::IntoIter<BasicCoverageBlock>;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl graph::WithPredecessors for CoverageGraph {
|
||||||
|
#[inline]
|
||||||
|
fn predecessors(&self, node: Self::Node) -> <Self as graph::GraphPredecessors<'_>>::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<BasicBlock>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl BasicCoverageBlockData {
|
||||||
|
pub fn from(basic_blocks: Vec<BasicBlock>) -> 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::<Vec<_>>()
|
||||||
|
.join(ID_SEPARATOR)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn bcb_filtered_successors<'a, 'tcx>(
|
||||||
|
body: &'tcx &'a mir::Body<'tcx>,
|
||||||
|
term_kind: &'tcx TerminatorKind<'tcx>,
|
||||||
|
) -> Box<dyn Iterator<Item = &'a BasicBlock> + '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<
|
pub struct ShortCircuitPreorder<
|
||||||
'a,
|
'a,
|
||||||
'tcx,
|
'tcx,
|
||||||
F: Fn(&'tcx TerminatorKind<'tcx>) -> mir::Successors<'tcx>,
|
F: Fn(
|
||||||
|
&'tcx &'a mir::Body<'tcx>,
|
||||||
|
&'tcx TerminatorKind<'tcx>,
|
||||||
|
) -> Box<dyn Iterator<Item = &'a BasicBlock> + 'a>,
|
||||||
> {
|
> {
|
||||||
body: &'a mir::Body<'tcx>,
|
body: &'tcx &'a mir::Body<'tcx>,
|
||||||
visited: BitSet<BasicBlock>,
|
visited: BitSet<BasicBlock>,
|
||||||
worklist: Vec<BasicBlock>,
|
worklist: Vec<BasicBlock>,
|
||||||
filtered_successors: F,
|
filtered_successors: F,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx, F: Fn(&'tcx TerminatorKind<'tcx>) -> mir::Successors<'tcx>>
|
impl<
|
||||||
ShortCircuitPreorder<'a, 'tcx, F>
|
'a,
|
||||||
|
'tcx,
|
||||||
|
F: Fn(
|
||||||
|
&'tcx &'a mir::Body<'tcx>,
|
||||||
|
&'tcx TerminatorKind<'tcx>,
|
||||||
|
) -> Box<dyn Iterator<Item = &'a BasicBlock> + 'a>,
|
||||||
|
> ShortCircuitPreorder<'a, 'tcx, F>
|
||||||
{
|
{
|
||||||
pub fn new(
|
pub fn new(
|
||||||
body: &'a mir::Body<'tcx>,
|
body: &'tcx &'a mir::Body<'tcx>,
|
||||||
filtered_successors: F,
|
filtered_successors: F,
|
||||||
) -> ShortCircuitPreorder<'a, 'tcx, F> {
|
) -> ShortCircuitPreorder<'a, 'tcx, F> {
|
||||||
let worklist = vec![mir::START_BLOCK];
|
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
|
impl<
|
||||||
for ShortCircuitPreorder<'a, 'tcx, F>
|
'a: 'tcx,
|
||||||
|
'tcx,
|
||||||
|
F: Fn(
|
||||||
|
&'tcx &'a mir::Body<'tcx>,
|
||||||
|
&'tcx TerminatorKind<'tcx>,
|
||||||
|
) -> Box<dyn Iterator<Item = &'a BasicBlock> + 'a>,
|
||||||
|
> Iterator for ShortCircuitPreorder<'a, 'tcx, F>
|
||||||
{
|
{
|
||||||
type Item = (BasicBlock, &'a BasicBlockData<'tcx>);
|
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];
|
let data = &self.body[idx];
|
||||||
|
|
||||||
if let Some(ref term) = data.terminator {
|
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));
|
return Some((idx, data));
|
||||||
|
|
|
@ -6,13 +6,14 @@ mod graph;
|
||||||
mod spans;
|
mod spans;
|
||||||
|
|
||||||
use counters::CoverageCounters;
|
use counters::CoverageCounters;
|
||||||
use graph::BasicCoverageBlocks;
|
use graph::CoverageGraph;
|
||||||
use spans::{CoverageSpan, CoverageSpans};
|
use spans::{CoverageSpan, CoverageSpans};
|
||||||
|
|
||||||
use crate::transform::MirPass;
|
use crate::transform::MirPass;
|
||||||
use crate::util::pretty;
|
use crate::util::pretty;
|
||||||
|
|
||||||
use rustc_data_structures::fingerprint::Fingerprint;
|
use rustc_data_structures::fingerprint::Fingerprint;
|
||||||
|
use rustc_data_structures::graph::WithNumNodes;
|
||||||
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
||||||
use rustc_data_structures::sync::Lrc;
|
use rustc_data_structures::sync::Lrc;
|
||||||
use rustc_index::vec::IndexVec;
|
use rustc_index::vec::IndexVec;
|
||||||
|
@ -73,7 +74,7 @@ struct Instrumentor<'a, 'tcx> {
|
||||||
tcx: TyCtxt<'tcx>,
|
tcx: TyCtxt<'tcx>,
|
||||||
mir_body: &'a mut mir::Body<'tcx>,
|
mir_body: &'a mut mir::Body<'tcx>,
|
||||||
body_span: Span,
|
body_span: Span,
|
||||||
basic_coverage_blocks: BasicCoverageBlocks,
|
basic_coverage_blocks: CoverageGraph,
|
||||||
coverage_counters: CoverageCounters,
|
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 hir_body = hir_body(tcx, mir_body.source.def_id());
|
||||||
let body_span = hir_body.value.span;
|
let body_span = hir_body.value.span;
|
||||||
let function_source_hash = hash_mir_source(tcx, hir_body);
|
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 {
|
Self {
|
||||||
pass_name,
|
pass_name,
|
||||||
tcx,
|
tcx,
|
||||||
|
@ -103,7 +104,7 @@ impl<'a, 'tcx> Instrumentor<'a, 'tcx> {
|
||||||
debug!("instrumenting {:?}, span: {}", def_id, source_map.span_to_string(body_span));
|
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(
|
let coverage_spans = CoverageSpans::generate_coverage_spans(
|
||||||
&self.mir_body,
|
&self.mir_body,
|
||||||
body_span,
|
body_span,
|
||||||
|
@ -135,9 +136,11 @@ impl<'a, 'tcx> Instrumentor<'a, 'tcx> {
|
||||||
let source_file = source_map.lookup_source_file(body_span.lo());
|
let source_file = source_map.lookup_source_file(body_span.lo());
|
||||||
let file_name = Symbol::intern(&source_file.name.to_string());
|
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());
|
let mut bcb_counters = IndexVec::from_elem_n(None, self.basic_coverage_blocks.num_nodes());
|
||||||
for CoverageSpan { span, bcb_leader_bb: bb, .. } in coverage_spans {
|
for covspan in coverage_spans {
|
||||||
if let Some(&counter_operand) = bb_counters[bb].as_ref() {
|
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(
|
let expression = self.coverage_counters.make_expression(
|
||||||
counter_operand,
|
counter_operand,
|
||||||
Op::Add,
|
Op::Add,
|
||||||
|
@ -149,6 +152,7 @@ impl<'a, 'tcx> Instrumentor<'a, 'tcx> {
|
||||||
span,
|
span,
|
||||||
source_map.span_to_snippet(span).expect("Error getting source for 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);
|
let code_region = make_code_region(file_name, &source_file, span, body_span);
|
||||||
inject_statement(self.mir_body, expression, bb, Some(code_region));
|
inject_statement(self.mir_body, expression, bb, Some(code_region));
|
||||||
} else {
|
} else {
|
||||||
|
@ -160,7 +164,8 @@ impl<'a, 'tcx> Instrumentor<'a, 'tcx> {
|
||||||
source_map.span_to_snippet(span).expect("Error getting source for span"),
|
source_map.span_to_snippet(span).expect("Error getting source for span"),
|
||||||
);
|
);
|
||||||
let counter_operand = counter.as_operand_id();
|
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);
|
let code_region = make_code_region(file_name, &source_file, span, body_span);
|
||||||
inject_statement(self.mir_body, counter, bb, Some(code_region));
|
inject_statement(self.mir_body, counter, bb, Some(code_region));
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
use super::debug::term_type;
|
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 crate::util::spanview::source_range_no_file;
|
||||||
|
|
||||||
use rustc_data_structures::graph::dominators::Dominators;
|
|
||||||
use rustc_data_structures::graph::WithNumNodes;
|
use rustc_data_structures::graph::WithNumNodes;
|
||||||
use rustc_index::bit_set::BitSet;
|
use rustc_index::bit_set::BitSet;
|
||||||
use rustc_middle::mir::{
|
use rustc_middle::mir::{
|
||||||
|
@ -69,7 +68,7 @@ impl CoverageStatement {
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub(crate) struct CoverageSpan {
|
pub(crate) struct CoverageSpan {
|
||||||
pub span: Span,
|
pub span: Span,
|
||||||
pub bcb_leader_bb: BasicBlock,
|
pub bcb: BasicCoverageBlock,
|
||||||
pub coverage_statements: Vec<CoverageStatement>,
|
pub coverage_statements: Vec<CoverageStatement>,
|
||||||
pub is_closure: bool,
|
pub is_closure: bool,
|
||||||
}
|
}
|
||||||
|
@ -78,7 +77,7 @@ impl CoverageSpan {
|
||||||
pub fn for_statement(
|
pub fn for_statement(
|
||||||
statement: &Statement<'tcx>,
|
statement: &Statement<'tcx>,
|
||||||
span: Span,
|
span: Span,
|
||||||
bcb: &BasicCoverageBlock,
|
bcb: BasicCoverageBlock,
|
||||||
bb: BasicBlock,
|
bb: BasicBlock,
|
||||||
stmt_index: usize,
|
stmt_index: usize,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
|
@ -92,16 +91,16 @@ impl CoverageSpan {
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
span,
|
span,
|
||||||
bcb_leader_bb: bcb.leader_bb(),
|
bcb,
|
||||||
coverage_statements: vec![CoverageStatement::Statement(bb, span, stmt_index)],
|
coverage_statements: vec![CoverageStatement::Statement(bb, span, stmt_index)],
|
||||||
is_closure,
|
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 {
|
Self {
|
||||||
span,
|
span,
|
||||||
bcb_leader_bb: bcb.leader_bb(),
|
bcb,
|
||||||
coverage_statements: vec![CoverageStatement::Terminator(bb, span)],
|
coverage_statements: vec![CoverageStatement::Terminator(bb, span)],
|
||||||
is_closure: false,
|
is_closure: false,
|
||||||
}
|
}
|
||||||
|
@ -132,7 +131,7 @@ impl CoverageSpan {
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn is_in_same_bcb(&self, other: &Self) -> bool {
|
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(
|
pub fn format_coverage_statements(
|
||||||
|
@ -164,15 +163,12 @@ pub struct CoverageSpans<'a, 'tcx> {
|
||||||
/// The MIR, used to look up `BasicBlockData`.
|
/// The MIR, used to look up `BasicBlockData`.
|
||||||
mir_body: &'a mir::Body<'tcx>,
|
mir_body: &'a mir::Body<'tcx>,
|
||||||
|
|
||||||
/// A snapshot of the MIR CFG dominators before injecting any coverage statements.
|
|
||||||
dominators: Dominators<BasicBlock>,
|
|
||||||
|
|
||||||
/// A `Span` covering the function body of the MIR (typically from left curly brace to right
|
/// A `Span` covering the function body of the MIR (typically from left curly brace to right
|
||||||
/// curly brace).
|
/// curly brace).
|
||||||
body_span: Span,
|
body_span: Span,
|
||||||
|
|
||||||
/// The BasicCoverageBlock Control Flow Graph (BCB CFG).
|
/// 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
|
/// The initial set of `CoverageSpan`s, sorted by `Span` (`lo` and `hi`) and by relative
|
||||||
/// dominance between the `BasicCoverageBlock`s of equal `Span`s.
|
/// 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(
|
pub(crate) fn generate_coverage_spans(
|
||||||
mir_body: &'a mir::Body<'tcx>,
|
mir_body: &'a mir::Body<'tcx>,
|
||||||
body_span: Span,
|
body_span: Span,
|
||||||
basic_coverage_blocks: &'a BasicCoverageBlocks,
|
basic_coverage_blocks: &'a CoverageGraph,
|
||||||
) -> Vec<CoverageSpan> {
|
) -> Vec<CoverageSpan> {
|
||||||
let dominators = mir_body.dominators();
|
|
||||||
let mut coverage_spans = CoverageSpans {
|
let mut coverage_spans = CoverageSpans {
|
||||||
mir_body,
|
mir_body,
|
||||||
dominators,
|
|
||||||
body_span,
|
body_span,
|
||||||
basic_coverage_blocks,
|
basic_coverage_blocks,
|
||||||
sorted_spans_iter: None,
|
sorted_spans_iter: None,
|
||||||
|
@ -246,7 +240,7 @@ impl<'a, 'tcx> CoverageSpans<'a, 'tcx> {
|
||||||
/// The basic steps are:
|
/// The basic steps are:
|
||||||
///
|
///
|
||||||
/// 1. Extract an initial set of spans from the `Statement`s and `Terminator`s of each
|
/// 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
|
/// 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
|
/// are sorted with longer spans before shorter spans; and equal spans are sorted
|
||||||
/// (deterministically) based on "dominator" relationship (if any).
|
/// (deterministically) based on "dominator" relationship (if any).
|
||||||
|
@ -263,8 +257,8 @@ impl<'a, 'tcx> CoverageSpans<'a, 'tcx> {
|
||||||
/// to be).
|
/// to be).
|
||||||
fn mir_to_initial_sorted_coverage_spans(&self) -> Vec<CoverageSpan> {
|
fn mir_to_initial_sorted_coverage_spans(&self) -> Vec<CoverageSpan> {
|
||||||
let mut initial_spans = Vec::<CoverageSpan>::with_capacity(self.mir_body.num_nodes() * 2);
|
let mut initial_spans = Vec::<CoverageSpan>::with_capacity(self.mir_body.num_nodes() * 2);
|
||||||
for bcb in self.basic_coverage_blocks.iter() {
|
for (bcb, bcb_data) in self.basic_coverage_blocks.iter_enumerated() {
|
||||||
for coverage_span in self.bcb_to_initial_coverage_spans(bcb) {
|
for coverage_span in self.bcb_to_initial_coverage_spans(bcb, bcb_data) {
|
||||||
initial_spans.push(coverage_span);
|
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
|
// dominators always come after the dominated equal spans). When later
|
||||||
// comparing two spans in order, the first will either dominate the second,
|
// comparing two spans in order, the first will either dominate the second,
|
||||||
// or they will have no dominator relationship.
|
// 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 {
|
} else {
|
||||||
// Sort hi() in reverse order so shorter spans are attempted after longer spans.
|
// 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());
|
let mut has_coverage = BitSet::new_empty(basic_coverage_blocks.num_nodes());
|
||||||
for covspan in &refined_spans {
|
for covspan in &refined_spans {
|
||||||
if !covspan.span.is_empty() {
|
if !covspan.span.is_empty() {
|
||||||
has_coverage.insert(covspan.bcb_leader_bb);
|
has_coverage.insert(covspan.bcb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
refined_spans.retain(|covspan| {
|
refined_spans.retain(|covspan| {
|
||||||
!(covspan.span.is_empty()
|
!(covspan.span.is_empty()
|
||||||
&& is_goto(&mir_body[covspan.bcb_leader_bb].terminator().kind)
|
&& is_goto(&basic_coverage_blocks[covspan.bcb].terminator(mir_body).kind)
|
||||||
&& has_coverage.contains(covspan.bcb_leader_bb))
|
&& has_coverage.contains(covspan.bcb))
|
||||||
});
|
});
|
||||||
|
|
||||||
// Remove `CoverageSpan`s derived from closures, originally added to ensure the coverage
|
// 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
|
// 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
|
// 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
|
// merge some `CoverageSpan`s, at which point a `CoverageSpan` may represent multiple
|
||||||
// `Statement`s and/or `Terminator`s.)
|
// `Statement`s and/or `Terminator`s.)
|
||||||
fn bcb_to_initial_coverage_spans(&self, bcb: &BasicCoverageBlock) -> Vec<CoverageSpan> {
|
fn bcb_to_initial_coverage_spans(
|
||||||
bcb.blocks
|
&self,
|
||||||
|
bcb: BasicCoverageBlock,
|
||||||
|
bcb_data: &'a BasicCoverageBlockData,
|
||||||
|
) -> Vec<CoverageSpan> {
|
||||||
|
bcb_data
|
||||||
|
.basic_blocks
|
||||||
.iter()
|
.iter()
|
||||||
.map(|bbref| {
|
.map(|bbref| {
|
||||||
let bb = *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 {
|
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,14 +17,14 @@
|
||||||
},
|
},
|
||||||
"lines": {
|
"lines": {
|
||||||
"count": 40,
|
"count": 40,
|
||||||
"covered": 32,
|
"covered": 30,
|
||||||
"percent": 80
|
"percent": 75
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 39,
|
"count": 37,
|
||||||
"covered": 28,
|
"covered": 26,
|
||||||
"notcovered": 11,
|
"notcovered": 11,
|
||||||
"percent": 71.7948717948718
|
"percent": 70.27027027027027
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,14 +42,14 @@
|
||||||
},
|
},
|
||||||
"lines": {
|
"lines": {
|
||||||
"count": 40,
|
"count": 40,
|
||||||
"covered": 32,
|
"covered": 30,
|
||||||
"percent": 80
|
"percent": 75
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 39,
|
"count": 37,
|
||||||
"covered": 28,
|
"covered": 26,
|
||||||
"notcovered": 11,
|
"notcovered": 11,
|
||||||
"percent": 71.7948717948718
|
"percent": 70.27027027027027
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,10 +21,10 @@
|
||||||
"percent": 100
|
"percent": 100
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 10,
|
"count": 9,
|
||||||
"covered": 8,
|
"covered": 8,
|
||||||
"notcovered": 2,
|
"notcovered": 1,
|
||||||
"percent": 80
|
"percent": 88.88888888888889
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,10 +46,10 @@
|
||||||
"percent": 100
|
"percent": 100
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 10,
|
"count": 9,
|
||||||
"covered": 8,
|
"covered": 8,
|
||||||
"notcovered": 2,
|
"notcovered": 1,
|
||||||
"percent": 80
|
"percent": 88.88888888888889
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,14 +17,14 @@
|
||||||
},
|
},
|
||||||
"lines": {
|
"lines": {
|
||||||
"count": 21,
|
"count": 21,
|
||||||
"covered": 17,
|
"covered": 16,
|
||||||
"percent": 80.95238095238095
|
"percent": 76.19047619047619
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 20,
|
"count": 18,
|
||||||
"covered": 16,
|
"covered": 14,
|
||||||
"notcovered": 4,
|
"notcovered": 4,
|
||||||
"percent": 80
|
"percent": 77.77777777777779
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,14 +42,14 @@
|
||||||
},
|
},
|
||||||
"lines": {
|
"lines": {
|
||||||
"count": 21,
|
"count": 21,
|
||||||
"covered": 17,
|
"covered": 16,
|
||||||
"percent": 80.95238095238095
|
"percent": 76.19047619047619
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 20,
|
"count": 18,
|
||||||
"covered": 16,
|
"covered": 14,
|
||||||
"notcovered": 4,
|
"notcovered": 4,
|
||||||
"percent": 80
|
"percent": 77.77777777777779
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,15 +16,15 @@
|
||||||
"percent": 100
|
"percent": 100
|
||||||
},
|
},
|
||||||
"lines": {
|
"lines": {
|
||||||
"count": 20,
|
"count": 19,
|
||||||
"covered": 19,
|
"covered": 18,
|
||||||
"percent": 95
|
"percent": 94.73684210526315
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 20,
|
"count": 18,
|
||||||
"covered": 17,
|
"covered": 15,
|
||||||
"notcovered": 3,
|
"notcovered": 3,
|
||||||
"percent": 85
|
"percent": 83.33333333333334
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,15 +41,15 @@
|
||||||
"percent": 100
|
"percent": 100
|
||||||
},
|
},
|
||||||
"lines": {
|
"lines": {
|
||||||
"count": 20,
|
"count": 19,
|
||||||
"covered": 19,
|
"covered": 18,
|
||||||
"percent": 95
|
"percent": 94.73684210526315
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 20,
|
"count": 18,
|
||||||
"covered": 17,
|
"covered": 15,
|
||||||
"notcovered": 3,
|
"notcovered": 3,
|
||||||
"percent": 85
|
"percent": 83.33333333333334
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,10 +21,10 @@
|
||||||
"percent": 75
|
"percent": 75
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 5,
|
"count": 4,
|
||||||
"covered": 3,
|
"covered": 3,
|
||||||
"notcovered": 2,
|
"notcovered": 1,
|
||||||
"percent": 60
|
"percent": 75
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,10 +46,10 @@
|
||||||
"percent": 75
|
"percent": 75
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 5,
|
"count": 4,
|
||||||
"covered": 3,
|
"covered": 3,
|
||||||
"notcovered": 2,
|
"notcovered": 1,
|
||||||
"percent": 60
|
"percent": 75
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,15 +16,15 @@
|
||||||
"percent": 100
|
"percent": 100
|
||||||
},
|
},
|
||||||
"lines": {
|
"lines": {
|
||||||
"count": 18,
|
"count": 17,
|
||||||
"covered": 15,
|
"covered": 15,
|
||||||
"percent": 83.33333333333334
|
"percent": 88.23529411764706
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 11,
|
"count": 10,
|
||||||
"covered": 8,
|
"covered": 8,
|
||||||
"notcovered": 3,
|
"notcovered": 2,
|
||||||
"percent": 72.72727272727273
|
"percent": 80
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,15 +41,15 @@
|
||||||
"percent": 100
|
"percent": 100
|
||||||
},
|
},
|
||||||
"lines": {
|
"lines": {
|
||||||
"count": 18,
|
"count": 17,
|
||||||
"covered": 15,
|
"covered": 15,
|
||||||
"percent": 83.33333333333334
|
"percent": 88.23529411764706
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 11,
|
"count": 10,
|
||||||
"covered": 8,
|
"covered": 8,
|
||||||
"notcovered": 3,
|
"notcovered": 2,
|
||||||
"percent": 72.72727272727273
|
"percent": 80
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
47| 0| {
|
47| 0| {
|
||||||
48| 0| c = 400
|
48| 0| c = 400
|
||||||
49| 0| ;
|
49| 0| ;
|
||||||
50| 1| }
|
50| 0| }
|
||||||
51| |
|
51| |
|
||||||
52| 1| if !is_true {
|
52| 1| if !is_true {
|
||||||
53| 0| a = 2;
|
53| 0| a = 2;
|
||||||
|
@ -60,6 +60,6 @@
|
||||||
57| 1| b = 30;
|
57| 1| b = 30;
|
||||||
58| 1| } else {
|
58| 1| } else {
|
||||||
59| 0| c = 400;
|
59| 0| c = 400;
|
||||||
60| 1| }
|
60| 0| }
|
||||||
61| 1|}
|
61| 1|}
|
||||||
|
|
||||||
|
|
|
@ -19,8 +19,8 @@
|
||||||
19| 0| a -= 2;
|
19| 0| a -= 2;
|
||||||
20| 0| }
|
20| 0| }
|
||||||
21| 2| }
|
21| 2| }
|
||||||
22| 3| }
|
22| 2| }
|
||||||
23| 0| countdown -= 1;
|
23| 0| countdown -= 1;
|
||||||
24| 1| }
|
24| 0| }
|
||||||
25| 1|}
|
25| 1|}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
6| 1| Err(())
|
6| 1| Err(())
|
||||||
7| | } else {
|
7| | } else {
|
||||||
8| 5| Ok(())
|
8| 5| Ok(())
|
||||||
9| 1| }
|
9| | }
|
||||||
10| 6|}
|
10| 6|}
|
||||||
11| |
|
11| |
|
||||||
12| |fn main() -> Result<(),()> {
|
12| |fn main() -> Result<(),()> {
|
||||||
|
@ -31,7 +31,7 @@
|
||||||
31| 5| call(/*return_error=*/ false)?;
|
31| 5| call(/*return_error=*/ false)?;
|
||||||
^0
|
^0
|
||||||
32| 5| }
|
32| 5| }
|
||||||
33| 6| }
|
33| 5| }
|
||||||
34| 0| Ok(())
|
34| 0| Ok(())
|
||||||
35| 2|}
|
35| 2|}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
24| | else
|
24| | else
|
||||||
25| | {
|
25| | {
|
||||||
26| 1| Err(1)
|
26| 1| Err(1)
|
||||||
27| 0| }
|
27| | }
|
||||||
28| | ;
|
28| | ;
|
||||||
29| | }
|
29| | }
|
||||||
30| 6| countdown
|
30| 6| countdown
|
||||||
|
|
|
@ -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 19:8 -> 19:12, (#1 + 0)
|
||||||
Counter in file 0 20:9 -> 21:22, #2
|
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, #4
|
||||||
Counter in file 0 27:1 -> 27:2, (#2 + 0)
|
|
||||||
Emitting segments for file: ../coverage/drop_trait.rs
|
Emitting segments for file: ../coverage/drop_trait.rs
|
||||||
Combined regions:
|
Combined regions:
|
||||||
9:24 -> 11:6 (count=2)
|
9:24 -> 11:6 (count=2)
|
||||||
15:9 -> 17:42 (count=1)
|
15:9 -> 17:42 (count=1)
|
||||||
19:8 -> 19:12 (count=1)
|
19:8 -> 19:12 (count=1)
|
||||||
20:9 -> 21:22 (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 9:24 (count = 2), RegionEntry
|
||||||
Segment at 11:6 (count = 0), Skipped
|
Segment at 11:6 (count = 0), Skipped
|
||||||
Segment at 15:9 (count = 1), RegionEntry
|
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 19:12 (count = 0), Skipped
|
||||||
Segment at 20:9 (count = 1), RegionEntry
|
Segment at 20:9 (count = 1), RegionEntry
|
||||||
Segment at 21:22 (count = 0), Skipped
|
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
|
Segment at 27:2 (count = 0), Skipped
|
||||||
|
|
|
@ -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 30:8 -> 30:12, (#1 + 0)
|
||||||
Counter in file 0 31:9 -> 32:22, #2
|
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, #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
|
||||||
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
|
Emitting segments for file: ../coverage/generics.rs
|
||||||
|
@ -15,7 +14,7 @@ Combined regions:
|
||||||
23:9 -> 28:28 (count=1)
|
23:9 -> 28:28 (count=1)
|
||||||
30:8 -> 30:12 (count=1)
|
30:8 -> 30:12 (count=1)
|
||||||
31:9 -> 32:22 (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 10:49 (count = 3), RegionEntry
|
||||||
Segment at 12:6 (count = 0), Skipped
|
Segment at 12:6 (count = 0), Skipped
|
||||||
Segment at 17:24 (count = 2), RegionEntry
|
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 30:12 (count = 0), Skipped
|
||||||
Segment at 31:9 (count = 1), RegionEntry
|
Segment at 31:9 (count = 1), RegionEntry
|
||||||
Segment at 32:22 (count = 0), Skipped
|
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
|
Segment at 38:2 (count = 0), Skipped
|
||||||
Emitting segments for function: _RNvMCs4fqI2P2rA04_8genericsINtB2_8FireworkdE12set_strengthB2_
|
Emitting segments for function: _RNvMCs4fqI2P2rA04_8genericsINtB2_8FireworkdE12set_strengthB2_
|
||||||
Combined regions:
|
Combined regions:
|
||||||
|
|
|
@ -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 7:9 -> 11:16, #1
|
||||||
Counter in file 0 12:5 -> 17:6, #2
|
Counter in file 0 12:5 -> 17:6, #2
|
||||||
Counter in file 0 20:9 -> 22:16, #3
|
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 26:9 -> 26:16, #4
|
||||||
Counter in file 0 27:5 -> 32:6, #5
|
Counter in file 0 27:5 -> 32:6, #5
|
||||||
Counter in file 0 34:5 -> 39:6, #6
|
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
|
Counter in file 0 40:1 -> 40:2, #7
|
||||||
Emitting segments for file: ../coverage/if_else.rs
|
Emitting segments for file: ../coverage/if_else.rs
|
||||||
Combined regions:
|
Combined regions:
|
||||||
7:9 -> 11:16 (count=1)
|
7:9 -> 11:16 (count=1)
|
||||||
12:5 -> 17:6 (count=1)
|
12:5 -> 17:6 (count=1)
|
||||||
20:9 -> 22:16 (count=0)
|
20:9 -> 22:16 (count=0)
|
||||||
23:6 -> 23:7 (count=1)
|
|
||||||
26:9 -> 26:16 (count=1)
|
26:9 -> 26:16 (count=1)
|
||||||
27:5 -> 32:6 (count=1)
|
27:5 -> 32:6 (count=1)
|
||||||
34:5 -> 39:6 (count=0)
|
34:5 -> 39:6 (count=0)
|
||||||
39:6 -> 39:7 (count=1)
|
|
||||||
40:1 -> 40:2 (count=1)
|
40:1 -> 40:2 (count=1)
|
||||||
Segment at 7:9 (count = 1), RegionEntry
|
Segment at 7:9 (count = 1), RegionEntry
|
||||||
Segment at 11:16 (count = 0), Skipped
|
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 17:6 (count = 0), Skipped
|
||||||
Segment at 20:9 (count = 0), RegionEntry
|
Segment at 20:9 (count = 0), RegionEntry
|
||||||
Segment at 22:16 (count = 0), Skipped
|
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:9 (count = 1), RegionEntry
|
||||||
Segment at 26:16 (count = 0), Skipped
|
Segment at 26:16 (count = 0), Skipped
|
||||||
Segment at 27:5 (count = 1), RegionEntry
|
Segment at 27:5 (count = 1), RegionEntry
|
||||||
Segment at 32:6 (count = 0), Skipped
|
Segment at 32:6 (count = 0), Skipped
|
||||||
Segment at 34:5 (count = 0), RegionEntry
|
Segment at 34:5 (count = 0), RegionEntry
|
||||||
Segment at 39:6 (count = 1), RegionEntry
|
Segment at 39:6 (count = 0), Skipped
|
||||||
Segment at 39:7 (count = 0), Skipped
|
|
||||||
Segment at 40:1 (count = 1), RegionEntry
|
Segment at 40:1 (count = 1), RegionEntry
|
||||||
Segment at 40:2 (count = 0), Skipped
|
Segment at 40:2 (count = 0), Skipped
|
||||||
|
|
|
@ -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 41:9 -> 41:16, #23
|
||||||
Counter in file 0 42:5 -> 45:6, #24
|
Counter in file 0 42:5 -> 45:6, #24
|
||||||
Counter in file 0 47:5 -> 50:6, #25
|
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:8 -> 52:16, #26
|
||||||
Counter in file 0 52:17 -> 54:6, #27
|
Counter in file 0 52:17 -> 54:6, #27
|
||||||
Counter in file 0 54:6 -> 54:7, #28
|
Counter in file 0 54:6 -> 54:7, #28
|
||||||
Counter in file 0 56:8 -> 56:15, #29
|
Counter in file 0 56:8 -> 56:15, #29
|
||||||
Counter in file 0 56:16 -> 58:6, #30
|
Counter in file 0 56:16 -> 58:6, #30
|
||||||
Counter in file 0 58:12 -> 60:6, #31
|
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
|
Counter in file 0 61:1 -> 61:2, #32
|
||||||
Emitting segments for file: ../coverage/lazy_boolean.rs
|
Emitting segments for file: ../coverage/lazy_boolean.rs
|
||||||
Combined regions:
|
Combined regions:
|
||||||
|
@ -66,14 +64,12 @@ Combined regions:
|
||||||
41:9 -> 41:16 (count=1)
|
41:9 -> 41:16 (count=1)
|
||||||
42:5 -> 45:6 (count=1)
|
42:5 -> 45:6 (count=1)
|
||||||
47:5 -> 50:6 (count=0)
|
47:5 -> 50:6 (count=0)
|
||||||
50:6 -> 50:7 (count=1)
|
|
||||||
52:8 -> 52:16 (count=1)
|
52:8 -> 52:16 (count=1)
|
||||||
52:17 -> 54:6 (count=0)
|
52:17 -> 54:6 (count=0)
|
||||||
54:6 -> 54:7 (count=1)
|
54:6 -> 54:7 (count=1)
|
||||||
56:8 -> 56:15 (count=1)
|
56:8 -> 56:15 (count=1)
|
||||||
56:16 -> 58:6 (count=1)
|
56:16 -> 58:6 (count=1)
|
||||||
58:12 -> 60:6 (count=0)
|
58:12 -> 60:6 (count=0)
|
||||||
60:6 -> 60:7 (count=1)
|
|
||||||
61:1 -> 61:2 (count=1)
|
61:1 -> 61:2 (count=1)
|
||||||
Segment at 7:9 (count = 1), RegionEntry
|
Segment at 7:9 (count = 1), RegionEntry
|
||||||
Segment at 9:42 (count = 0), Skipped
|
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 42:5 (count = 1), RegionEntry
|
||||||
Segment at 45:6 (count = 0), Skipped
|
Segment at 45:6 (count = 0), Skipped
|
||||||
Segment at 47:5 (count = 0), RegionEntry
|
Segment at 47:5 (count = 0), RegionEntry
|
||||||
Segment at 50:6 (count = 1), RegionEntry
|
Segment at 50:6 (count = 0), Skipped
|
||||||
Segment at 50:7 (count = 0), Skipped
|
|
||||||
Segment at 52:8 (count = 1), RegionEntry
|
Segment at 52:8 (count = 1), RegionEntry
|
||||||
Segment at 52:16 (count = 0), Skipped
|
Segment at 52:16 (count = 0), Skipped
|
||||||
Segment at 52:17 (count = 0), RegionEntry
|
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 56:16 (count = 1), RegionEntry
|
||||||
Segment at 58:6 (count = 0), Skipped
|
Segment at 58:6 (count = 0), Skipped
|
||||||
Segment at 58:12 (count = 0), RegionEntry
|
Segment at 58:12 (count = 0), RegionEntry
|
||||||
Segment at 60:6 (count = 1), RegionEntry
|
Segment at 60:6 (count = 0), Skipped
|
||||||
Segment at 60:7 (count = 0), Skipped
|
|
||||||
Segment at 61:1 (count = 1), RegionEntry
|
Segment at 61:1 (count = 1), RegionEntry
|
||||||
Segment at 61:2 (count = 0), Skipped
|
Segment at 61:2 (count = 0), Skipped
|
||||||
|
|
|
@ -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 17:10 -> 17:11, #10
|
||||||
Counter in file 0 18:9 -> 18:15, #11
|
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, #12
|
||||||
Counter in file 0 19:5 -> 19:6, (#8 + 0)
|
|
||||||
Counter in file 0 22:11 -> 25:2, #1
|
Counter in file 0 22:11 -> 25:2, #1
|
||||||
Emitting segments for file: ../coverage/loops_and_branches.rs
|
Emitting segments for file: ../coverage/loops_and_branches.rs
|
||||||
Combined regions:
|
Combined regions:
|
||||||
|
|
|
@ -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 19:21 -> 21:14, #11
|
||||||
Counter in file 0 21:14 -> 21:15, #12
|
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, #13
|
||||||
Counter in file 0 22:10 -> 22:11, (#3 + 0)
|
|
||||||
Counter in file 0 23:9 -> 23:23, #14
|
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, #15
|
||||||
Counter in file 0 24:6 -> 24:7, (#1 + 0)
|
|
||||||
Counter in file 0 25:1 -> 25:2, #16
|
Counter in file 0 25:1 -> 25:2, #16
|
||||||
Emitting segments for file: ../coverage/nested_loops.rs
|
Emitting segments for file: ../coverage/nested_loops.rs
|
||||||
Combined regions:
|
Combined regions:
|
||||||
|
@ -35,9 +33,9 @@ Combined regions:
|
||||||
17:21 -> 17:33 (count=1)
|
17:21 -> 17:33 (count=1)
|
||||||
19:21 -> 21:14 (count=0)
|
19:21 -> 21:14 (count=0)
|
||||||
21:14 -> 21:15 (count=2)
|
21:14 -> 21:15 (count=2)
|
||||||
22:10 -> 22:11 (count=3)
|
22:10 -> 22:11 (count=2)
|
||||||
23:9 -> 23:23 (count=0)
|
23:9 -> 23:23 (count=0)
|
||||||
24:6 -> 24:7 (count=1)
|
24:6 -> 24:7 (count=0)
|
||||||
25:1 -> 25:2 (count=1)
|
25:1 -> 25:2 (count=1)
|
||||||
Segment at 2:9 (count = 1), RegionEntry
|
Segment at 2:9 (count = 1), RegionEntry
|
||||||
Segment at 3:27 (count = 0), Skipped
|
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 19:21 (count = 0), RegionEntry
|
||||||
Segment at 21:14 (count = 2), RegionEntry
|
Segment at 21:14 (count = 2), RegionEntry
|
||||||
Segment at 21:15 (count = 0), Skipped
|
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 22:11 (count = 0), Skipped
|
||||||
Segment at 23:9 (count = 0), RegionEntry
|
Segment at 23:9 (count = 0), RegionEntry
|
||||||
Segment at 23:23 (count = 0), Skipped
|
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 24:7 (count = 0), Skipped
|
||||||
Segment at 25:1 (count = 1), RegionEntry
|
Segment at 25:1 (count = 1), RegionEntry
|
||||||
Segment at 25:2 (count = 0), Skipped
|
Segment at 25:2 (count = 0), Skipped
|
||||||
|
|
|
@ -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, #9
|
||||||
Counter in file 0 32:10 -> 32:11, #10
|
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, #11
|
||||||
Counter in file 0 33:6 -> 33:7, (#1 + 0)
|
|
||||||
Counter in file 0 34:5 -> 34:11, #12
|
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, #13
|
||||||
Counter in file 0 35:1 -> 35:2, #14
|
Counter in file 0 35:1 -> 35:2, #14
|
||||||
Counter in file 0 5:8 -> 5:20, #1
|
Counter in file 0 5:8 -> 5:20, #1
|
||||||
Counter in file 0 6:9 -> 6:16, #2
|
Counter in file 0 6:9 -> 6:16, #2
|
||||||
Counter in file 0 8:9 -> 8:15, #3
|
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
|
Counter in file 0 10:1 -> 10:2, #4
|
||||||
Emitting segments for file: ../coverage/try_error_result.rs
|
Emitting segments for file: ../coverage/try_error_result.rs
|
||||||
Combined regions:
|
Combined regions:
|
||||||
5:8 -> 5:20 (count=6)
|
5:8 -> 5:20 (count=6)
|
||||||
6:9 -> 6:16 (count=1)
|
6:9 -> 6:16 (count=1)
|
||||||
8:9 -> 8:15 (count=5)
|
8:9 -> 8:15 (count=5)
|
||||||
9:6 -> 9:7 (count=1)
|
|
||||||
10:1 -> 10:2 (count=6)
|
10:1 -> 10:2 (count=6)
|
||||||
13:9 -> 14:23 (count=1)
|
13:9 -> 14:23 (count=1)
|
||||||
17:9 -> 17:10 (count=6)
|
17:9 -> 17:10 (count=6)
|
||||||
|
@ -35,7 +32,7 @@ Combined regions:
|
||||||
31:13 -> 31:42 (count=5)
|
31:13 -> 31:42 (count=5)
|
||||||
31:42 -> 31:43 (count=0)
|
31:42 -> 31:43 (count=0)
|
||||||
32:10 -> 32:11 (count=5)
|
32:10 -> 32:11 (count=5)
|
||||||
33:6 -> 33:7 (count=6)
|
33:6 -> 33:7 (count=5)
|
||||||
34:5 -> 34:11 (count=0)
|
34:5 -> 34:11 (count=0)
|
||||||
35:1 -> 35:2 (count=2)
|
35:1 -> 35:2 (count=2)
|
||||||
Segment at 5:8 (count = 6), RegionEntry
|
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 6:16 (count = 0), Skipped
|
||||||
Segment at 8:9 (count = 5), RegionEntry
|
Segment at 8:9 (count = 5), RegionEntry
|
||||||
Segment at 8:15 (count = 0), Skipped
|
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:1 (count = 6), RegionEntry
|
||||||
Segment at 10:2 (count = 0), Skipped
|
Segment at 10:2 (count = 0), Skipped
|
||||||
Segment at 13:9 (count = 1), RegionEntry
|
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 31:43 (count = 0), Skipped
|
||||||
Segment at 32:10 (count = 5), RegionEntry
|
Segment at 32:10 (count = 5), RegionEntry
|
||||||
Segment at 32:11 (count = 0), Skipped
|
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 33:7 (count = 0), Skipped
|
||||||
Segment at 34:5 (count = 0), RegionEntry
|
Segment at 34:5 (count = 0), RegionEntry
|
||||||
Segment at 34:11 (count = 0), Skipped
|
Segment at 34:11 (count = 0), Skipped
|
||||||
|
|
|
@ -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 2:9 -> 2:16, #1
|
||||||
Counter in file 0 3:11 -> 3:20, #2
|
Counter in file 0 3:11 -> 3:20, #2
|
||||||
Counter in file 0 3:21 -> 4:6, #3
|
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
|
Counter in file 0 5:1 -> 5:2, #4
|
||||||
Emitting segments for file: ../coverage/while.rs
|
Emitting segments for file: ../coverage/while.rs
|
||||||
Combined regions:
|
Combined regions:
|
||||||
2:9 -> 2:16 (count=1)
|
2:9 -> 2:16 (count=1)
|
||||||
3:11 -> 3:20 (count=1)
|
3:11 -> 3:20 (count=1)
|
||||||
3:21 -> 4:6 (count=0)
|
3:21 -> 4:6 (count=0)
|
||||||
4:6 -> 4:7 (count=0)
|
|
||||||
5:1 -> 5:2 (count=1)
|
5:1 -> 5:2 (count=1)
|
||||||
Segment at 2:9 (count = 1), RegionEntry
|
Segment at 2:9 (count = 1), RegionEntry
|
||||||
Segment at 2:16 (count = 0), Skipped
|
Segment at 2:16 (count = 0), Skipped
|
||||||
Segment at 3:11 (count = 1), RegionEntry
|
Segment at 3:11 (count = 1), RegionEntry
|
||||||
Segment at 3:20 (count = 0), Skipped
|
Segment at 3:20 (count = 0), Skipped
|
||||||
Segment at 3:21 (count = 0), RegionEntry
|
Segment at 3:21 (count = 0), RegionEntry
|
||||||
Segment at 4:6 (count = 0), RegionEntry
|
Segment at 4:6 (count = 0), Skipped
|
||||||
Segment at 4:7 (count = 0), Skipped
|
|
||||||
Segment at 5:1 (count = 1), RegionEntry
|
Segment at 5:1 (count = 1), RegionEntry
|
||||||
Segment at 5:2 (count = 0), Skipped
|
Segment at 5:2 (count = 0), Skipped
|
||||||
|
|
|
@ -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 18:21 -> 20:22, #4
|
||||||
Counter in file 0 22:21 -> 22:27, #5
|
Counter in file 0 22:21 -> 22:27, #5
|
||||||
Counter in file 0 26:21 -> 26:27, #6
|
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 30:9 -> 32:10, #7
|
||||||
Counter in file 0 35:5 -> 35:11, #8
|
Counter in file 0 35:5 -> 35:11, #8
|
||||||
Counter in file 0 36:1 -> 36:2, #9
|
Counter in file 0 36:1 -> 36:2, #9
|
||||||
|
@ -18,7 +17,6 @@ Combined regions:
|
||||||
18:21 -> 20:22 (count=1)
|
18:21 -> 20:22 (count=1)
|
||||||
22:21 -> 22:27 (count=0)
|
22:21 -> 22:27 (count=0)
|
||||||
26:21 -> 26:27 (count=1)
|
26:21 -> 26:27 (count=1)
|
||||||
27:18 -> 27:19 (count=0)
|
|
||||||
30:9 -> 32:10 (count=6)
|
30:9 -> 32:10 (count=6)
|
||||||
35:5 -> 35:11 (count=0)
|
35:5 -> 35:11 (count=0)
|
||||||
36:1 -> 36:2 (count=2)
|
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 22:27 (count = 0), Skipped
|
||||||
Segment at 26:21 (count = 1), RegionEntry
|
Segment at 26:21 (count = 1), RegionEntry
|
||||||
Segment at 26:27 (count = 0), Skipped
|
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 30:9 (count = 6), RegionEntry
|
||||||
Segment at 32:10 (count = 0), Skipped
|
Segment at 32:10 (count = 0), Skipped
|
||||||
Segment at 35:5 (count = 0), RegionEntry
|
Segment at 35:5 (count = 0), RegionEntry
|
||||||
|
|
|
@ -17,14 +17,14 @@
|
||||||
},
|
},
|
||||||
"lines": {
|
"lines": {
|
||||||
"count": 40,
|
"count": 40,
|
||||||
"covered": 32,
|
"covered": 30,
|
||||||
"percent": 80
|
"percent": 75
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 39,
|
"count": 37,
|
||||||
"covered": 28,
|
"covered": 26,
|
||||||
"notcovered": 11,
|
"notcovered": 11,
|
||||||
"percent": 71.7948717948718
|
"percent": 70.27027027027027
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,14 +42,14 @@
|
||||||
},
|
},
|
||||||
"lines": {
|
"lines": {
|
||||||
"count": 40,
|
"count": 40,
|
||||||
"covered": 32,
|
"covered": 30,
|
||||||
"percent": 80
|
"percent": 75
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 39,
|
"count": 37,
|
||||||
"covered": 28,
|
"covered": 26,
|
||||||
"notcovered": 11,
|
"notcovered": 11,
|
||||||
"percent": 71.7948717948718
|
"percent": 70.27027027027027
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,10 +21,10 @@
|
||||||
"percent": 100
|
"percent": 100
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 10,
|
"count": 9,
|
||||||
"covered": 8,
|
"covered": 8,
|
||||||
"notcovered": 2,
|
"notcovered": 1,
|
||||||
"percent": 80
|
"percent": 88.88888888888889
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,10 +46,10 @@
|
||||||
"percent": 100
|
"percent": 100
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 10,
|
"count": 9,
|
||||||
"covered": 8,
|
"covered": 8,
|
||||||
"notcovered": 2,
|
"notcovered": 1,
|
||||||
"percent": 80
|
"percent": 88.88888888888889
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,14 +17,14 @@
|
||||||
},
|
},
|
||||||
"lines": {
|
"lines": {
|
||||||
"count": 21,
|
"count": 21,
|
||||||
"covered": 17,
|
"covered": 16,
|
||||||
"percent": 80.95238095238095
|
"percent": 76.19047619047619
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 20,
|
"count": 18,
|
||||||
"covered": 16,
|
"covered": 14,
|
||||||
"notcovered": 4,
|
"notcovered": 4,
|
||||||
"percent": 80
|
"percent": 77.77777777777779
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,14 +42,14 @@
|
||||||
},
|
},
|
||||||
"lines": {
|
"lines": {
|
||||||
"count": 21,
|
"count": 21,
|
||||||
"covered": 17,
|
"covered": 16,
|
||||||
"percent": 80.95238095238095
|
"percent": 76.19047619047619
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 20,
|
"count": 18,
|
||||||
"covered": 16,
|
"covered": 14,
|
||||||
"notcovered": 4,
|
"notcovered": 4,
|
||||||
"percent": 80
|
"percent": 77.77777777777779
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,15 +16,15 @@
|
||||||
"percent": 100
|
"percent": 100
|
||||||
},
|
},
|
||||||
"lines": {
|
"lines": {
|
||||||
"count": 20,
|
"count": 19,
|
||||||
"covered": 19,
|
"covered": 18,
|
||||||
"percent": 95
|
"percent": 94.73684210526315
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 20,
|
"count": 18,
|
||||||
"covered": 17,
|
"covered": 15,
|
||||||
"notcovered": 3,
|
"notcovered": 3,
|
||||||
"percent": 85
|
"percent": 83.33333333333334
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,15 +41,15 @@
|
||||||
"percent": 100
|
"percent": 100
|
||||||
},
|
},
|
||||||
"lines": {
|
"lines": {
|
||||||
"count": 20,
|
"count": 19,
|
||||||
"covered": 19,
|
"covered": 18,
|
||||||
"percent": 95
|
"percent": 94.73684210526315
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 20,
|
"count": 18,
|
||||||
"covered": 17,
|
"covered": 15,
|
||||||
"notcovered": 3,
|
"notcovered": 3,
|
||||||
"percent": 85
|
"percent": 83.33333333333334
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,10 +21,10 @@
|
||||||
"percent": 75
|
"percent": 75
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 5,
|
"count": 4,
|
||||||
"covered": 3,
|
"covered": 3,
|
||||||
"notcovered": 2,
|
"notcovered": 1,
|
||||||
"percent": 60
|
"percent": 75
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,10 +46,10 @@
|
||||||
"percent": 75
|
"percent": 75
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 5,
|
"count": 4,
|
||||||
"covered": 3,
|
"covered": 3,
|
||||||
"notcovered": 2,
|
"notcovered": 1,
|
||||||
"percent": 60
|
"percent": 75
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,15 +16,15 @@
|
||||||
"percent": 100
|
"percent": 100
|
||||||
},
|
},
|
||||||
"lines": {
|
"lines": {
|
||||||
"count": 18,
|
"count": 17,
|
||||||
"covered": 15,
|
"covered": 15,
|
||||||
"percent": 83.33333333333334
|
"percent": 88.23529411764706
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 11,
|
"count": 10,
|
||||||
"covered": 8,
|
"covered": 8,
|
||||||
"notcovered": 3,
|
"notcovered": 2,
|
||||||
"percent": 72.72727272727273
|
"percent": 80
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,15 +41,15 @@
|
||||||
"percent": 100
|
"percent": 100
|
||||||
},
|
},
|
||||||
"lines": {
|
"lines": {
|
||||||
"count": 18,
|
"count": 17,
|
||||||
"covered": 15,
|
"covered": 15,
|
||||||
"percent": 83.33333333333334
|
"percent": 88.23529411764706
|
||||||
},
|
},
|
||||||
"regions": {
|
"regions": {
|
||||||
"count": 11,
|
"count": 10,
|
||||||
"covered": 8,
|
"covered": 8,
|
||||||
"notcovered": 3,
|
"notcovered": 2,
|
||||||
"percent": 72.72727272727273
|
"percent": 80
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
47| 0| {
|
47| 0| {
|
||||||
48| 0| c = 400
|
48| 0| c = 400
|
||||||
49| 0| ;
|
49| 0| ;
|
||||||
50| 1| }
|
50| 0| }
|
||||||
51| |
|
51| |
|
||||||
52| 1| if !is_true {
|
52| 1| if !is_true {
|
||||||
53| 0| a = 2;
|
53| 0| a = 2;
|
||||||
|
@ -60,6 +60,6 @@
|
||||||
57| 1| b = 30;
|
57| 1| b = 30;
|
||||||
58| 1| } else {
|
58| 1| } else {
|
||||||
59| 0| c = 400;
|
59| 0| c = 400;
|
||||||
60| 1| }
|
60| 0| }
|
||||||
61| 1|}
|
61| 1|}
|
||||||
|
|
||||||
|
|
|
@ -19,8 +19,8 @@
|
||||||
19| 0| a -= 2;
|
19| 0| a -= 2;
|
||||||
20| 0| }
|
20| 0| }
|
||||||
21| 2| }
|
21| 2| }
|
||||||
22| 3| }
|
22| 2| }
|
||||||
23| 0| countdown -= 1;
|
23| 0| countdown -= 1;
|
||||||
24| 1| }
|
24| 0| }
|
||||||
25| 1|}
|
25| 1|}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
6| 1| Err(())
|
6| 1| Err(())
|
||||||
7| | } else {
|
7| | } else {
|
||||||
8| 5| Ok(())
|
8| 5| Ok(())
|
||||||
9| 1| }
|
9| | }
|
||||||
10| 6|}
|
10| 6|}
|
||||||
11| |
|
11| |
|
||||||
12| |fn main() -> Result<(),()> {
|
12| |fn main() -> Result<(),()> {
|
||||||
|
@ -31,7 +31,7 @@
|
||||||
31| 5| call(/*return_error=*/ false)?;
|
31| 5| call(/*return_error=*/ false)?;
|
||||||
^0
|
^0
|
||||||
32| 5| }
|
32| 5| }
|
||||||
33| 6| }
|
33| 5| }
|
||||||
34| 0| Ok(())
|
34| 0| Ok(())
|
||||||
35| 2|}
|
35| 2|}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
24| | else
|
24| | else
|
||||||
25| | {
|
25| | {
|
||||||
26| 1| Err(1)
|
26| 1| Err(1)
|
||||||
27| 0| }
|
27| | }
|
||||||
28| | ;
|
28| | ;
|
||||||
29| | }
|
29| | }
|
||||||
30| 6| countdown
|
30| 6| countdown
|
||||||
|
|
|
@ -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 19:8 -> 19:12, (#1 + 0)
|
||||||
Counter in file 0 20:9 -> 21:22, #2
|
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, #4
|
||||||
Counter in file 0 27:1 -> 27:2, (#2 + 0)
|
|
||||||
Emitting segments for file: ../coverage/drop_trait.rs
|
Emitting segments for file: ../coverage/drop_trait.rs
|
||||||
Combined regions:
|
Combined regions:
|
||||||
9:24 -> 11:6 (count=2)
|
9:24 -> 11:6 (count=2)
|
||||||
15:9 -> 17:42 (count=1)
|
15:9 -> 17:42 (count=1)
|
||||||
19:8 -> 19:12 (count=1)
|
19:8 -> 19:12 (count=1)
|
||||||
20:9 -> 21:22 (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 9:24 (count = 2), RegionEntry
|
||||||
Segment at 11:6 (count = 0), Skipped
|
Segment at 11:6 (count = 0), Skipped
|
||||||
Segment at 15:9 (count = 1), RegionEntry
|
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 19:12 (count = 0), Skipped
|
||||||
Segment at 20:9 (count = 1), RegionEntry
|
Segment at 20:9 (count = 1), RegionEntry
|
||||||
Segment at 21:22 (count = 0), Skipped
|
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
|
Segment at 27:2 (count = 0), Skipped
|
||||||
|
|
|
@ -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 30:8 -> 30:12, (#1 + 0)
|
||||||
Counter in file 0 31:9 -> 32:22, #2
|
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, #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
|
||||||
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
|
Emitting segments for file: ../coverage/generics.rs
|
||||||
|
@ -15,7 +14,7 @@ Combined regions:
|
||||||
23:9 -> 28:28 (count=1)
|
23:9 -> 28:28 (count=1)
|
||||||
30:8 -> 30:12 (count=1)
|
30:8 -> 30:12 (count=1)
|
||||||
31:9 -> 32:22 (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 10:49 (count = 3), RegionEntry
|
||||||
Segment at 12:6 (count = 0), Skipped
|
Segment at 12:6 (count = 0), Skipped
|
||||||
Segment at 17:24 (count = 2), RegionEntry
|
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 30:12 (count = 0), Skipped
|
||||||
Segment at 31:9 (count = 1), RegionEntry
|
Segment at 31:9 (count = 1), RegionEntry
|
||||||
Segment at 32:22 (count = 0), Skipped
|
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
|
Segment at 38:2 (count = 0), Skipped
|
||||||
Emitting segments for function: _RNvMCs4fqI2P2rA04_8genericsINtB2_8FireworkdE12set_strengthB2_
|
Emitting segments for function: _RNvMCs4fqI2P2rA04_8genericsINtB2_8FireworkdE12set_strengthB2_
|
||||||
Combined regions:
|
Combined regions:
|
||||||
|
|
|
@ -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 7:9 -> 11:16, #1
|
||||||
Counter in file 0 12:5 -> 17:6, #2
|
Counter in file 0 12:5 -> 17:6, #2
|
||||||
Counter in file 0 20:9 -> 22:16, #3
|
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 26:9 -> 26:16, #4
|
||||||
Counter in file 0 27:5 -> 32:6, #5
|
Counter in file 0 27:5 -> 32:6, #5
|
||||||
Counter in file 0 34:5 -> 39:6, #6
|
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
|
Counter in file 0 40:1 -> 40:2, #7
|
||||||
Emitting segments for file: ../coverage/if_else.rs
|
Emitting segments for file: ../coverage/if_else.rs
|
||||||
Combined regions:
|
Combined regions:
|
||||||
7:9 -> 11:16 (count=1)
|
7:9 -> 11:16 (count=1)
|
||||||
12:5 -> 17:6 (count=1)
|
12:5 -> 17:6 (count=1)
|
||||||
20:9 -> 22:16 (count=0)
|
20:9 -> 22:16 (count=0)
|
||||||
23:6 -> 23:7 (count=1)
|
|
||||||
26:9 -> 26:16 (count=1)
|
26:9 -> 26:16 (count=1)
|
||||||
27:5 -> 32:6 (count=1)
|
27:5 -> 32:6 (count=1)
|
||||||
34:5 -> 39:6 (count=0)
|
34:5 -> 39:6 (count=0)
|
||||||
39:6 -> 39:7 (count=1)
|
|
||||||
40:1 -> 40:2 (count=1)
|
40:1 -> 40:2 (count=1)
|
||||||
Segment at 7:9 (count = 1), RegionEntry
|
Segment at 7:9 (count = 1), RegionEntry
|
||||||
Segment at 11:16 (count = 0), Skipped
|
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 17:6 (count = 0), Skipped
|
||||||
Segment at 20:9 (count = 0), RegionEntry
|
Segment at 20:9 (count = 0), RegionEntry
|
||||||
Segment at 22:16 (count = 0), Skipped
|
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:9 (count = 1), RegionEntry
|
||||||
Segment at 26:16 (count = 0), Skipped
|
Segment at 26:16 (count = 0), Skipped
|
||||||
Segment at 27:5 (count = 1), RegionEntry
|
Segment at 27:5 (count = 1), RegionEntry
|
||||||
Segment at 32:6 (count = 0), Skipped
|
Segment at 32:6 (count = 0), Skipped
|
||||||
Segment at 34:5 (count = 0), RegionEntry
|
Segment at 34:5 (count = 0), RegionEntry
|
||||||
Segment at 39:6 (count = 1), RegionEntry
|
Segment at 39:6 (count = 0), Skipped
|
||||||
Segment at 39:7 (count = 0), Skipped
|
|
||||||
Segment at 40:1 (count = 1), RegionEntry
|
Segment at 40:1 (count = 1), RegionEntry
|
||||||
Segment at 40:2 (count = 0), Skipped
|
Segment at 40:2 (count = 0), Skipped
|
||||||
|
|
|
@ -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 41:9 -> 41:16, #23
|
||||||
Counter in file 0 42:5 -> 45:6, #24
|
Counter in file 0 42:5 -> 45:6, #24
|
||||||
Counter in file 0 47:5 -> 50:6, #25
|
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:8 -> 52:16, #26
|
||||||
Counter in file 0 52:17 -> 54:6, #27
|
Counter in file 0 52:17 -> 54:6, #27
|
||||||
Counter in file 0 54:6 -> 54:7, #28
|
Counter in file 0 54:6 -> 54:7, #28
|
||||||
Counter in file 0 56:8 -> 56:15, #29
|
Counter in file 0 56:8 -> 56:15, #29
|
||||||
Counter in file 0 56:16 -> 58:6, #30
|
Counter in file 0 56:16 -> 58:6, #30
|
||||||
Counter in file 0 58:12 -> 60:6, #31
|
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
|
Counter in file 0 61:1 -> 61:2, #32
|
||||||
Emitting segments for file: ../coverage/lazy_boolean.rs
|
Emitting segments for file: ../coverage/lazy_boolean.rs
|
||||||
Combined regions:
|
Combined regions:
|
||||||
|
@ -66,14 +64,12 @@ Combined regions:
|
||||||
41:9 -> 41:16 (count=1)
|
41:9 -> 41:16 (count=1)
|
||||||
42:5 -> 45:6 (count=1)
|
42:5 -> 45:6 (count=1)
|
||||||
47:5 -> 50:6 (count=0)
|
47:5 -> 50:6 (count=0)
|
||||||
50:6 -> 50:7 (count=1)
|
|
||||||
52:8 -> 52:16 (count=1)
|
52:8 -> 52:16 (count=1)
|
||||||
52:17 -> 54:6 (count=0)
|
52:17 -> 54:6 (count=0)
|
||||||
54:6 -> 54:7 (count=1)
|
54:6 -> 54:7 (count=1)
|
||||||
56:8 -> 56:15 (count=1)
|
56:8 -> 56:15 (count=1)
|
||||||
56:16 -> 58:6 (count=1)
|
56:16 -> 58:6 (count=1)
|
||||||
58:12 -> 60:6 (count=0)
|
58:12 -> 60:6 (count=0)
|
||||||
60:6 -> 60:7 (count=1)
|
|
||||||
61:1 -> 61:2 (count=1)
|
61:1 -> 61:2 (count=1)
|
||||||
Segment at 7:9 (count = 1), RegionEntry
|
Segment at 7:9 (count = 1), RegionEntry
|
||||||
Segment at 9:42 (count = 0), Skipped
|
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 42:5 (count = 1), RegionEntry
|
||||||
Segment at 45:6 (count = 0), Skipped
|
Segment at 45:6 (count = 0), Skipped
|
||||||
Segment at 47:5 (count = 0), RegionEntry
|
Segment at 47:5 (count = 0), RegionEntry
|
||||||
Segment at 50:6 (count = 1), RegionEntry
|
Segment at 50:6 (count = 0), Skipped
|
||||||
Segment at 50:7 (count = 0), Skipped
|
|
||||||
Segment at 52:8 (count = 1), RegionEntry
|
Segment at 52:8 (count = 1), RegionEntry
|
||||||
Segment at 52:16 (count = 0), Skipped
|
Segment at 52:16 (count = 0), Skipped
|
||||||
Segment at 52:17 (count = 0), RegionEntry
|
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 56:16 (count = 1), RegionEntry
|
||||||
Segment at 58:6 (count = 0), Skipped
|
Segment at 58:6 (count = 0), Skipped
|
||||||
Segment at 58:12 (count = 0), RegionEntry
|
Segment at 58:12 (count = 0), RegionEntry
|
||||||
Segment at 60:6 (count = 1), RegionEntry
|
Segment at 60:6 (count = 0), Skipped
|
||||||
Segment at 60:7 (count = 0), Skipped
|
|
||||||
Segment at 61:1 (count = 1), RegionEntry
|
Segment at 61:1 (count = 1), RegionEntry
|
||||||
Segment at 61:2 (count = 0), Skipped
|
Segment at 61:2 (count = 0), Skipped
|
||||||
|
|
|
@ -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 17:10 -> 17:11, #10
|
||||||
Counter in file 0 18:9 -> 18:15, #11
|
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, #12
|
||||||
Counter in file 0 19:5 -> 19:6, (#8 + 0)
|
|
||||||
Counter in file 0 22:11 -> 25:2, #1
|
Counter in file 0 22:11 -> 25:2, #1
|
||||||
Emitting segments for file: ../coverage/loops_and_branches.rs
|
Emitting segments for file: ../coverage/loops_and_branches.rs
|
||||||
Combined regions:
|
Combined regions:
|
||||||
|
|
|
@ -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 19:21 -> 21:14, #11
|
||||||
Counter in file 0 21:14 -> 21:15, #12
|
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, #13
|
||||||
Counter in file 0 22:10 -> 22:11, (#3 + 0)
|
|
||||||
Counter in file 0 23:9 -> 23:23, #14
|
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, #15
|
||||||
Counter in file 0 24:6 -> 24:7, (#1 + 0)
|
|
||||||
Counter in file 0 25:1 -> 25:2, #16
|
Counter in file 0 25:1 -> 25:2, #16
|
||||||
Emitting segments for file: ../coverage/nested_loops.rs
|
Emitting segments for file: ../coverage/nested_loops.rs
|
||||||
Combined regions:
|
Combined regions:
|
||||||
|
@ -35,9 +33,9 @@ Combined regions:
|
||||||
17:21 -> 17:33 (count=1)
|
17:21 -> 17:33 (count=1)
|
||||||
19:21 -> 21:14 (count=0)
|
19:21 -> 21:14 (count=0)
|
||||||
21:14 -> 21:15 (count=2)
|
21:14 -> 21:15 (count=2)
|
||||||
22:10 -> 22:11 (count=3)
|
22:10 -> 22:11 (count=2)
|
||||||
23:9 -> 23:23 (count=0)
|
23:9 -> 23:23 (count=0)
|
||||||
24:6 -> 24:7 (count=1)
|
24:6 -> 24:7 (count=0)
|
||||||
25:1 -> 25:2 (count=1)
|
25:1 -> 25:2 (count=1)
|
||||||
Segment at 2:9 (count = 1), RegionEntry
|
Segment at 2:9 (count = 1), RegionEntry
|
||||||
Segment at 3:27 (count = 0), Skipped
|
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 19:21 (count = 0), RegionEntry
|
||||||
Segment at 21:14 (count = 2), RegionEntry
|
Segment at 21:14 (count = 2), RegionEntry
|
||||||
Segment at 21:15 (count = 0), Skipped
|
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 22:11 (count = 0), Skipped
|
||||||
Segment at 23:9 (count = 0), RegionEntry
|
Segment at 23:9 (count = 0), RegionEntry
|
||||||
Segment at 23:23 (count = 0), Skipped
|
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 24:7 (count = 0), Skipped
|
||||||
Segment at 25:1 (count = 1), RegionEntry
|
Segment at 25:1 (count = 1), RegionEntry
|
||||||
Segment at 25:2 (count = 0), Skipped
|
Segment at 25:2 (count = 0), Skipped
|
||||||
|
|
|
@ -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, #1
|
||||||
Counter in file 0 4:39 -> 4:49, #2
|
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, #3
|
||||||
Counter in file 0 4:39 -> 4:49, #4
|
Counter in file 0 4:48 -> 4:49, #4
|
||||||
Counter in file 0 4:48 -> 4:49, #5
|
|
||||||
Counter in file 0 8:5 -> 8:17, #1
|
Counter in file 0 8:5 -> 8:17, #1
|
||||||
Counter in file 0 21:11 -> 26:2, #1
|
Counter in file 0 21:11 -> 26:2, #1
|
||||||
Counter in file 0 4:39 -> 4:40, #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, #1
|
||||||
Counter in file 0 4:51 -> 4:54, #2
|
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, #3
|
||||||
Counter in file 0 4:51 -> 4:54, #4
|
Counter in file 0 4:53 -> 4:54, #4
|
||||||
Counter in file 0 4:53 -> 4:54, #5
|
|
||||||
Counter in file 0 13:9 -> 18:6, #1
|
Counter in file 0 13:9 -> 18:6, #1
|
||||||
Counter in file 0 7:5 -> 7:6, #1
|
Counter in file 0 7:5 -> 7:6, #1
|
||||||
Counter in file 0 4:39 -> 4:40, #1
|
Counter in file 0 4:39 -> 4:40, #1
|
||||||
|
|
|
@ -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, #9
|
||||||
Counter in file 0 32:10 -> 32:11, #10
|
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, #11
|
||||||
Counter in file 0 33:6 -> 33:7, (#1 + 0)
|
|
||||||
Counter in file 0 34:5 -> 34:11, #12
|
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, #13
|
||||||
Counter in file 0 35:1 -> 35:2, #14
|
Counter in file 0 35:1 -> 35:2, #14
|
||||||
Counter in file 0 5:8 -> 5:20, #1
|
Counter in file 0 5:8 -> 5:20, #1
|
||||||
Counter in file 0 6:9 -> 6:16, #2
|
Counter in file 0 6:9 -> 6:16, #2
|
||||||
Counter in file 0 8:9 -> 8:15, #3
|
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
|
Counter in file 0 10:1 -> 10:2, #4
|
||||||
Emitting segments for file: ../coverage/try_error_result.rs
|
Emitting segments for file: ../coverage/try_error_result.rs
|
||||||
Combined regions:
|
Combined regions:
|
||||||
5:8 -> 5:20 (count=6)
|
5:8 -> 5:20 (count=6)
|
||||||
6:9 -> 6:16 (count=1)
|
6:9 -> 6:16 (count=1)
|
||||||
8:9 -> 8:15 (count=5)
|
8:9 -> 8:15 (count=5)
|
||||||
9:6 -> 9:7 (count=1)
|
|
||||||
10:1 -> 10:2 (count=6)
|
10:1 -> 10:2 (count=6)
|
||||||
13:9 -> 14:23 (count=1)
|
13:9 -> 14:23 (count=1)
|
||||||
17:9 -> 17:10 (count=6)
|
17:9 -> 17:10 (count=6)
|
||||||
|
@ -35,7 +32,7 @@ Combined regions:
|
||||||
31:13 -> 31:42 (count=5)
|
31:13 -> 31:42 (count=5)
|
||||||
31:42 -> 31:43 (count=0)
|
31:42 -> 31:43 (count=0)
|
||||||
32:10 -> 32:11 (count=5)
|
32:10 -> 32:11 (count=5)
|
||||||
33:6 -> 33:7 (count=6)
|
33:6 -> 33:7 (count=5)
|
||||||
34:5 -> 34:11 (count=0)
|
34:5 -> 34:11 (count=0)
|
||||||
35:1 -> 35:2 (count=2)
|
35:1 -> 35:2 (count=2)
|
||||||
Segment at 5:8 (count = 6), RegionEntry
|
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 6:16 (count = 0), Skipped
|
||||||
Segment at 8:9 (count = 5), RegionEntry
|
Segment at 8:9 (count = 5), RegionEntry
|
||||||
Segment at 8:15 (count = 0), Skipped
|
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:1 (count = 6), RegionEntry
|
||||||
Segment at 10:2 (count = 0), Skipped
|
Segment at 10:2 (count = 0), Skipped
|
||||||
Segment at 13:9 (count = 1), RegionEntry
|
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 31:43 (count = 0), Skipped
|
||||||
Segment at 32:10 (count = 5), RegionEntry
|
Segment at 32:10 (count = 5), RegionEntry
|
||||||
Segment at 32:11 (count = 0), Skipped
|
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 33:7 (count = 0), Skipped
|
||||||
Segment at 34:5 (count = 0), RegionEntry
|
Segment at 34:5 (count = 0), RegionEntry
|
||||||
Segment at 34:11 (count = 0), Skipped
|
Segment at 34:11 (count = 0), Skipped
|
||||||
|
|
|
@ -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 2:9 -> 2:16, #1
|
||||||
Counter in file 0 3:11 -> 3:20, #2
|
Counter in file 0 3:11 -> 3:20, #2
|
||||||
Counter in file 0 3:21 -> 4:6, #3
|
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
|
Counter in file 0 5:1 -> 5:2, #4
|
||||||
Emitting segments for file: ../coverage/while.rs
|
Emitting segments for file: ../coverage/while.rs
|
||||||
Combined regions:
|
Combined regions:
|
||||||
2:9 -> 2:16 (count=1)
|
2:9 -> 2:16 (count=1)
|
||||||
3:11 -> 3:20 (count=1)
|
3:11 -> 3:20 (count=1)
|
||||||
3:21 -> 4:6 (count=0)
|
3:21 -> 4:6 (count=0)
|
||||||
4:6 -> 4:7 (count=0)
|
|
||||||
5:1 -> 5:2 (count=1)
|
5:1 -> 5:2 (count=1)
|
||||||
Segment at 2:9 (count = 1), RegionEntry
|
Segment at 2:9 (count = 1), RegionEntry
|
||||||
Segment at 2:16 (count = 0), Skipped
|
Segment at 2:16 (count = 0), Skipped
|
||||||
Segment at 3:11 (count = 1), RegionEntry
|
Segment at 3:11 (count = 1), RegionEntry
|
||||||
Segment at 3:20 (count = 0), Skipped
|
Segment at 3:20 (count = 0), Skipped
|
||||||
Segment at 3:21 (count = 0), RegionEntry
|
Segment at 3:21 (count = 0), RegionEntry
|
||||||
Segment at 4:6 (count = 0), RegionEntry
|
Segment at 4:6 (count = 0), Skipped
|
||||||
Segment at 4:7 (count = 0), Skipped
|
|
||||||
Segment at 5:1 (count = 1), RegionEntry
|
Segment at 5:1 (count = 1), RegionEntry
|
||||||
Segment at 5:2 (count = 0), Skipped
|
Segment at 5:2 (count = 0), Skipped
|
||||||
|
|
|
@ -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 18:21 -> 20:22, #4
|
||||||
Counter in file 0 22:21 -> 22:27, #5
|
Counter in file 0 22:21 -> 22:27, #5
|
||||||
Counter in file 0 26:21 -> 26:27, #6
|
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 30:9 -> 32:10, #7
|
||||||
Counter in file 0 35:5 -> 35:11, #8
|
Counter in file 0 35:5 -> 35:11, #8
|
||||||
Counter in file 0 36:1 -> 36:2, #9
|
Counter in file 0 36:1 -> 36:2, #9
|
||||||
|
@ -18,7 +17,6 @@ Combined regions:
|
||||||
18:21 -> 20:22 (count=1)
|
18:21 -> 20:22 (count=1)
|
||||||
22:21 -> 22:27 (count=0)
|
22:21 -> 22:27 (count=0)
|
||||||
26:21 -> 26:27 (count=1)
|
26:21 -> 26:27 (count=1)
|
||||||
27:18 -> 27:19 (count=0)
|
|
||||||
30:9 -> 32:10 (count=6)
|
30:9 -> 32:10 (count=6)
|
||||||
35:5 -> 35:11 (count=0)
|
35:5 -> 35:11 (count=0)
|
||||||
36:1 -> 36:2 (count=2)
|
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 22:27 (count = 0), Skipped
|
||||||
Segment at 26:21 (count = 1), RegionEntry
|
Segment at 26:21 (count = 1), RegionEntry
|
||||||
Segment at 26:27 (count = 0), Skipped
|
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 30:9 (count = 6), RegionEntry
|
||||||
Segment at 32:10 (count = 0), Skipped
|
Segment at 32:10 (count = 0), Skipped
|
||||||
Segment at 35:5 (count = 0), RegionEntry
|
Segment at 35:5 (count = 0), RegionEntry
|
||||||
|
|
|
@ -188,32 +188,32 @@
|
||||||
<span class="line"><span class="code even" style="--layer: 1" title="48:9-48:16: @29[0]: _7 = const 400_i32
|
<span class="line"><span class="code even" style="--layer: 1" title="48:9-48:16: @29[0]: _7 = const 400_i32
|
||||||
47:5-50:6: @29[1]: _42 = const ()"> ;</span></span>
|
47:5-50:6: @29[1]: _42 = const ()"> ;</span></span>
|
||||||
<span class="line"><span class="code even" style="--layer: 1" title="48:9-48:16: @29[0]: _7 = const 400_i32
|
<span class="line"><span class="code even" style="--layer: 1" title="48:9-48:16: @29[0]: _7 = const 400_i32
|
||||||
47:5-50:6: @29[1]: _42 = const ()"> }<span class="annotation">⦉@29</span></span></span><span><span class="code odd" style="--layer: 1" title="50:6-50:6: @30.Goto: goto -> bb31"><span class="annotation">@28,30⦊</span>‸<span class="annotation">⦉@28,30</span></span></span><span class="code" style="--layer: 0"></span></span>
|
47:5-50:6: @29[1]: _42 = const ()"> }<span class="annotation">⦉@29</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"></span></span>
|
<span class="line"><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> if </span><span><span class="code even" style="--layer: 1" title="52:9-52:16: @31[5]: _46 = _1
|
<span class="line"><span class="code" style="--layer: 0"> if </span><span><span class="code odd" style="--layer: 1" title="52:9-52:16: @31[5]: _46 = _1
|
||||||
52:8-52:16: @31[6]: _45 = Not(move _46)
|
52:8-52:16: @31[6]: _45 = Not(move _46)
|
||||||
52:8-52:16: @31[8]: FakeRead(ForMatchedPlace, _45)"><span class="annotation">@31⦊</span>!is_true<span class="annotation">⦉@31</span></span></span><span class="code" style="--layer: 0"> </span><span><span class="code odd" style="--layer: 1" title="53:9-53:14: @34[0]: _5 = const 2_i32
|
52:8-52:16: @31[8]: FakeRead(ForMatchedPlace, _45)"><span class="annotation">@31⦊</span>!is_true<span class="annotation">⦉@31</span></span></span><span class="code" style="--layer: 0"> </span><span><span class="code even" style="--layer: 1" title="53:9-53:14: @34[0]: _5 = const 2_i32
|
||||||
52:17-54:6: @34[1]: _44 = const ()
|
52:17-54:6: @34[1]: _44 = const ()
|
||||||
54:6-54:6: @34.Goto: goto -> bb35"><span class="annotation">@32,34⦊</span>{</span></span>
|
54:6-54:6: @34.Goto: goto -> bb35"><span class="annotation">@32,34⦊</span>{</span></span>
|
||||||
<span class="line"><span class="code odd" style="--layer: 1" title="53:9-53:14: @34[0]: _5 = const 2_i32
|
<span class="line"><span class="code even" style="--layer: 1" title="53:9-53:14: @34[0]: _5 = const 2_i32
|
||||||
52:17-54:6: @34[1]: _44 = const ()
|
52:17-54:6: @34[1]: _44 = const ()
|
||||||
54:6-54:6: @34.Goto: goto -> bb35"> a = 2;</span></span>
|
54:6-54:6: @34.Goto: goto -> bb35"> a = 2;</span></span>
|
||||||
<span class="line"><span class="code odd" style="--layer: 1" title="53:9-53:14: @34[0]: _5 = const 2_i32
|
<span class="line"><span class="code even" style="--layer: 1" title="53:9-53:14: @34[0]: _5 = const 2_i32
|
||||||
52:17-54:6: @34[1]: _44 = const ()
|
52:17-54:6: @34[1]: _44 = const ()
|
||||||
54:6-54:6: @34.Goto: goto -> bb35"> }<span class="annotation">⦉@32,34</span></span></span><span><span class="code even" style="--layer: 1" title="54:6-54:6: @33.Goto: goto -> bb35"><span class="annotation">@33⦊</span>‸<span class="annotation">⦉@33</span></span></span><span class="code" style="--layer: 0"></span></span>
|
54:6-54:6: @34.Goto: goto -> bb35"> }<span class="annotation">⦉@32,34</span></span></span><span><span class="code odd" style="--layer: 1" title="54:6-54:6: @33.Goto: goto -> bb35"><span class="annotation">@33⦊</span>‸<span class="annotation">⦉@33</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"></span></span>
|
<span class="line"><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> if </span><span><span class="code odd" style="--layer: 1" title="56:8-56:15: @35[3]: _47 = _1
|
<span class="line"><span class="code" style="--layer: 0"> if </span><span><span class="code even" style="--layer: 1" title="56:8-56:15: @35[3]: _47 = _1
|
||||||
56:8-56:15: @35[4]: FakeRead(ForMatchedPlace, _47)"><span class="annotation">@35⦊</span>is_true<span class="annotation">⦉@35</span></span></span><span class="code" style="--layer: 0"> </span><span><span class="code even" style="--layer: 1" title="57:9-57:15: @38[0]: _6 = const 30_i32
|
56:8-56:15: @35[4]: FakeRead(ForMatchedPlace, _47)"><span class="annotation">@35⦊</span>is_true<span class="annotation">⦉@35</span></span></span><span class="code" style="--layer: 0"> </span><span><span class="code odd" style="--layer: 1" title="57:9-57:15: @38[0]: _6 = const 30_i32
|
||||||
56:16-58:6: @38[1]: _0 = const ()"><span class="annotation">@36,38⦊</span>{</span></span>
|
56:16-58:6: @38[1]: _0 = const ()"><span class="annotation">@36,38⦊</span>{</span></span>
|
||||||
<span class="line"><span class="code even" style="--layer: 1" title="57:9-57:15: @38[0]: _6 = const 30_i32
|
<span class="line"><span class="code odd" style="--layer: 1" title="57:9-57:15: @38[0]: _6 = const 30_i32
|
||||||
56:16-58:6: @38[1]: _0 = const ()"> b = 30;</span></span>
|
56:16-58:6: @38[1]: _0 = const ()"> b = 30;</span></span>
|
||||||
<span class="line"><span class="code even" style="--layer: 1" title="57:9-57:15: @38[0]: _6 = const 30_i32
|
<span class="line"><span class="code odd" style="--layer: 1" title="57:9-57:15: @38[0]: _6 = const 30_i32
|
||||||
56:16-58:6: @38[1]: _0 = const ()"> }<span class="annotation">⦉@36,38</span></span></span><span class="code" style="--layer: 0"> else </span><span><span class="code odd" style="--layer: 1" title="59:9-59:16: @37[0]: _7 = const 400_i32
|
56:16-58:6: @38[1]: _0 = const ()"> }<span class="annotation">⦉@36,38</span></span></span><span class="code" style="--layer: 0"> else </span><span><span class="code even" style="--layer: 1" title="59:9-59:16: @37[0]: _7 = const 400_i32
|
||||||
58:12-60:6: @37[1]: _0 = const ()"><span class="annotation">@37⦊</span>{</span></span>
|
58:12-60:6: @37[1]: _0 = const ()"><span class="annotation">@37⦊</span>{</span></span>
|
||||||
<span class="line"><span class="code odd" style="--layer: 1" title="59:9-59:16: @37[0]: _7 = const 400_i32
|
<span class="line"><span class="code even" style="--layer: 1" title="59:9-59:16: @37[0]: _7 = const 400_i32
|
||||||
58:12-60:6: @37[1]: _0 = const ()"> c = 400;</span></span>
|
58:12-60:6: @37[1]: _0 = const ()"> c = 400;</span></span>
|
||||||
<span class="line"><span class="code odd" style="--layer: 1" title="59:9-59:16: @37[0]: _7 = const 400_i32
|
<span class="line"><span class="code even" style="--layer: 1" title="59:9-59:16: @37[0]: _7 = const 400_i32
|
||||||
58:12-60:6: @37[1]: _0 = const ()"> }<span class="annotation">⦉@37</span></span></span><span><span class="code even" style="--layer: 1" title="60:6-60:6: @38.Goto: goto -> bb39"><span class="annotation">@36,38⦊</span>‸<span class="annotation">⦉@36,38</span></span></span><span class="code" style="--layer: 0"></span></span>
|
58:12-60:6: @37[1]: _0 = const ()"> }<span class="annotation">⦉@37</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code odd" style="--layer: 1" title="61:2-61:2: @39.Return: return"><span class="annotation">@39⦊</span>‸<span class="annotation">⦉@39</span></span></span></span></div>
|
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code odd" style="--layer: 1" title="61:2-61:2: @39.Return: return"><span class="annotation">@39⦊</span>‸<span class="annotation">⦉@39</span></span></span></span></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -89,6 +89,6 @@
|
||||||
<span class="line"><span class="code even" style="--layer: 1" title="16:16-17:10: @2[0]: _3 = const ()"> }<span class="annotation">⦉@2</span></span></span><span><span class="code odd" style="--layer: 1" title="17:10-17:10: @15.Goto: goto -> bb21"><span class="annotation">@15⦊</span>‸<span class="annotation">⦉@15</span></span></span><span class="code" style="--layer: 0"></span></span>
|
<span class="line"><span class="code even" style="--layer: 1" title="16:16-17:10: @2[0]: _3 = const ()"> }<span class="annotation">⦉@2</span></span></span><span><span class="code odd" style="--layer: 1" title="17:10-17:10: @15.Goto: goto -> bb21"><span class="annotation">@15⦊</span>‸<span class="annotation">⦉@15</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code even" style="--layer: 1" title="18:12-18:14: @21[3]: _30 = ()
|
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code even" style="--layer: 1" title="18:12-18:14: @21[3]: _30 = ()
|
||||||
18:9-18:15: @21[4]: _0 = std::result::Result::<(), std::fmt::Error>::Ok(move _30)"><span class="annotation">@21⦊</span>Ok(())<span class="annotation">⦉@21</span></span></span><span class="code" style="--layer: 0"></span></span>
|
18:9-18:15: @21[4]: _0 = std::result::Result::<(), std::fmt::Error>::Ok(move _30)"><span class="annotation">@21⦊</span>Ok(())<span class="annotation">⦉@21</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> }</span><span><span class="code odd" style="--layer: 1" title="19:6-19:6: @20.Goto: goto -> bb22"><span class="annotation">@16,18,19,20⦊</span>‸<span class="annotation">⦉@16,18,19,20</span></span></span><span><span class="code even" style="--layer: 1" title="19:6-19:6: @22.Return: return"><span class="annotation">@22⦊</span>‸<span class="annotation">⦉@22</span></span></span></span></div>
|
<span class="line"><span class="code" style="--layer: 0"> }</span><span><span class="code odd" style="--layer: 1" title="19:6-19:6: @22.Return: return"><span class="annotation">@22⦊</span>‸<span class="annotation">⦉@22</span></span></span></span></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -117,9 +117,9 @@
|
||||||
21:14-21:14: @29.Goto: goto -> bb30"> }</span></span>
|
21:14-21:14: @29.Goto: goto -> bb30"> }</span></span>
|
||||||
<span class="line"><span class="code odd" style="--layer: 1" title="19:21-19:27: @29[0]: _9 = move (_36.0: i32)
|
<span class="line"><span class="code odd" style="--layer: 1" title="19:21-19:27: @29[0]: _9 = move (_36.0: i32)
|
||||||
21:14-21:14: @29.Goto: goto -> bb30"> }<span class="annotation">⦉@29</span></span></span><span><span class="code even" style="--layer: 1" title="21:14-21:14: @23.Goto: goto -> bb30"><span class="annotation">@23⦊</span>‸<span class="annotation">⦉@23</span></span></span><span class="code" style="--layer: 0"></span></span>
|
21:14-21:14: @29.Goto: goto -> bb30"> }<span class="annotation">⦉@29</span></span></span><span><span class="code even" style="--layer: 1" title="21:14-21:14: @23.Goto: goto -> bb30"><span class="annotation">@23⦊</span>‸<span class="annotation">⦉@23</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> }</span><span><span class="code odd" style="--layer: 1" title="22:10-22:10: @9.Goto: goto -> bb10"><span class="annotation">@6,8,9⦊</span>‸<span class="annotation">⦉@6,8,9</span></span></span><span><span class="code even" style="--layer: 1" title="22:10-22:10: @30.Goto: goto -> bb10"><span class="annotation">@30⦊</span>‸<span class="annotation">⦉@30</span></span></span><span class="code" style="--layer: 0"></span></span>
|
<span class="line"><span class="code" style="--layer: 0"> }</span><span><span class="code odd" style="--layer: 1" title="22:10-22:10: @30.Goto: goto -> bb10"><span class="annotation">@30⦊</span>‸<span class="annotation">⦉@30</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code odd" style="--layer: 1" title="23:9-23:23: @32[0]: _5 = move (_37.0: i32)"><span class="annotation">@32⦊</span>countdown -= 1<span class="annotation">⦉@32</span></span></span><span class="code" style="--layer: 0">;</span></span>
|
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code even" style="--layer: 1" title="23:9-23:23: @32[0]: _5 = move (_37.0: i32)"><span class="annotation">@32⦊</span>countdown -= 1<span class="annotation">⦉@32</span></span></span><span class="code" style="--layer: 0">;</span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> }</span><span><span class="code even" style="--layer: 1" title="24:6-24:6: @3.Goto: goto -> bb4"><span class="annotation">@0,1,2,3⦊</span>‸<span class="annotation">⦉@0,1,2,3</span></span></span><span><span class="code odd" style="--layer: 1" title="24:6-24:6: @7.Goto: goto -> bb33"><span class="annotation">@7⦊</span>‸<span class="annotation">⦉@7</span></span></span><span class="code" style="--layer: 0"></span></span>
|
<span class="line"><span class="code" style="--layer: 0"> }</span><span><span class="code odd" style="--layer: 1" title="24:6-24:6: @7.Goto: goto -> bb33"><span class="annotation">@7⦊</span>‸<span class="annotation">⦉@7</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code even" style="--layer: 1" title="25:2-25:2: @33.Return: return"><span class="annotation">@33⦊</span>‸<span class="annotation">⦉@33</span></span></span></span></div>
|
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code even" style="--layer: 1" title="25:2-25:2: @33.Return: return"><span class="annotation">@33⦊</span>‸<span class="annotation">⦉@33</span></span></span></span></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -60,11 +60,7 @@
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="code" style="counter-reset: line 3"><span class="line"> <span><span class="code even" style="--layer: 1" title="4:51-4:54: @14.Goto: goto -> bb15"><span class="annotation">@14⦊</span></span></span><span class="code even" style="--layer: 2" title="4:51-4:54: @12[0]: _0 = Equal
|
<div class="code" style="counter-reset: line 3"><span class="line"> <span><span class="code even" style="--layer: 1" title="4:51-4:54: @14.Goto: goto -> bb15"><span class="annotation">@14⦊</span></span></span><span class="code even" style="--layer: 2" title="4:51-4:54: @12[0]: _0 = Equal
|
||||||
4:51-4:54: @12.Goto: goto -> bb13"><span class="annotation">@11,12⦊</span></span><span class="code even" style="--layer: 3" title="4:51-4:54: @10[1]: _27 = _21
|
4:51-4:54: @12.Goto: goto -> bb13"><span class="annotation">@11,12⦊</span></span><span class="code even" style="--layer: 3" title="4:51-4:54: @13.Goto: goto -> bb14"><span class="annotation">@13⦊</span>Ord<span class="annotation">⦉@13</span></span><span class="code even" style="--layer: 2" title="4:51-4:54: @12[0]: _0 = Equal
|
||||||
4:51-4:54: @10[2]: _0 = _27
|
|
||||||
4:51-4:54: @10.Goto: goto -> bb13"><span class="annotation">@10⦊</span></span><span class="code even" style="--layer: 4" title="4:51-4:54: @13.Goto: goto -> bb14"><span class="annotation">@13⦊</span>Ord<span class="annotation">⦉@13</span></span><span class="code even" style="--layer: 3" title="4:51-4:54: @10[1]: _27 = _21
|
|
||||||
4:51-4:54: @10[2]: _0 = _27
|
|
||||||
4:51-4:54: @10.Goto: goto -> bb13"><span class="annotation">⦉@10</span></span><span class="code even" style="--layer: 2" title="4:51-4:54: @12[0]: _0 = Equal
|
|
||||||
4:51-4:54: @12.Goto: goto -> bb13"><span class="annotation">⦉@11,12</span></span><span><span class="code even" style="--layer: 1" title="4:51-4:54: @14.Goto: goto -> bb15"><span class="annotation">⦉@14</span></span></span><span><span class="code odd" style="--layer: 1" title="4:54-4:54: @15.Return: return"><span class="annotation">@15⦊</span>‸<span class="annotation">⦉@15</span></span></span></span></div>
|
4:51-4:54: @12.Goto: goto -> bb13"><span class="annotation">⦉@11,12</span></span><span><span class="code even" style="--layer: 1" title="4:51-4:54: @14.Goto: goto -> bb15"><span class="annotation">⦉@14</span></span></span><span><span class="code odd" style="--layer: 1" title="4:54-4:54: @15.Return: return"><span class="annotation">@15⦊</span>‸<span class="annotation">⦉@15</span></span></span></span></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -61,11 +61,7 @@
|
||||||
<body>
|
<body>
|
||||||
<div class="code" style="counter-reset: line 3"><span class="line"> <span><span class="code even" style="--layer: 1" title="4:39-4:49: @17.Goto: goto -> bb18"><span class="annotation">@17⦊</span></span></span><span class="code even" style="--layer: 2" title="4:39-4:49: @15[1]: _30 = Equal
|
<div class="code" style="counter-reset: line 3"><span class="line"> <span><span class="code even" style="--layer: 1" title="4:39-4:49: @17.Goto: goto -> bb18"><span class="annotation">@17⦊</span></span></span><span class="code even" style="--layer: 2" title="4:39-4:49: @15[1]: _30 = Equal
|
||||||
4:39-4:49: @15[2]: _0 = Option::<std::cmp::Ordering>::Some(move _30)
|
4:39-4:49: @15[2]: _0 = Option::<std::cmp::Ordering>::Some(move _30)
|
||||||
4:39-4:49: @15.Goto: goto -> bb16"><span class="annotation">@14,15⦊</span></span><span class="code even" style="--layer: 3" title="4:39-4:49: @12[1]: _31 = _23
|
4:39-4:49: @15.Goto: goto -> bb16"><span class="annotation">@14,15⦊</span></span><span class="code even" style="--layer: 3" title="4:39-4:49: @16.Goto: goto -> bb17"><span class="annotation">@16⦊</span>PartialOrd<span class="annotation">⦉@16</span></span><span class="code even" style="--layer: 2" title="4:39-4:49: @15[1]: _30 = Equal
|
||||||
4:39-4:49: @12[2]: _0 = _31
|
|
||||||
4:39-4:49: @12.Goto: goto -> bb16"><span class="annotation">@12⦊</span></span><span class="code even" style="--layer: 4" title="4:39-4:49: @16.Goto: goto -> bb17"><span class="annotation">@16⦊</span>PartialOrd<span class="annotation">⦉@16</span></span><span class="code even" style="--layer: 3" title="4:39-4:49: @12[1]: _31 = _23
|
|
||||||
4:39-4:49: @12[2]: _0 = _31
|
|
||||||
4:39-4:49: @12.Goto: goto -> bb16"><span class="annotation">⦉@12</span></span><span class="code even" style="--layer: 2" title="4:39-4:49: @15[1]: _30 = Equal
|
|
||||||
4:39-4:49: @15[2]: _0 = Option::<std::cmp::Ordering>::Some(move _30)
|
4:39-4:49: @15[2]: _0 = Option::<std::cmp::Ordering>::Some(move _30)
|
||||||
4:39-4:49: @15.Goto: goto -> bb16"><span class="annotation">⦉@14,15</span></span><span><span class="code even" style="--layer: 1" title="4:39-4:49: @17.Goto: goto -> bb18"><span class="annotation">⦉@17</span></span></span><span><span class="code odd" style="--layer: 1" title="4:49-4:49: @18.Return: return"><span class="annotation">@18⦊</span>‸<span class="annotation">⦉@18</span></span></span></span></div>
|
4:39-4:49: @15.Goto: goto -> bb16"><span class="annotation">⦉@14,15</span></span><span><span class="code even" style="--layer: 1" title="4:39-4:49: @17.Goto: goto -> bb18"><span class="annotation">⦉@17</span></span></span><span><span class="code odd" style="--layer: 1" title="4:49-4:49: @18.Return: return"><span class="annotation">@18⦊</span>‸<span class="annotation">⦉@18</span></span></span></span></div>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
@ -63,8 +63,8 @@
|
||||||
<span class="line"><span class="code" style="--layer: 0"> if </span><span><span class="code even" style="--layer: 1" title="2:8-2:13: @0[1]: _1 = const false
|
<span class="line"><span class="code" style="--layer: 0"> if </span><span><span class="code even" style="--layer: 1" title="2:8-2:13: @0[1]: _1 = const false
|
||||||
2:8-2:13: @0[2]: FakeRead(ForMatchedPlace, _1)"><span class="annotation">@0⦊</span>false<span class="annotation">⦉@0</span></span></span><span class="code" style="--layer: 0"> {</span></span>
|
2:8-2:13: @0[2]: FakeRead(ForMatchedPlace, _1)"><span class="annotation">@0⦊</span>false<span class="annotation">⦉@0</span></span></span><span class="code" style="--layer: 0"> {</span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code odd" style="--layer: 1" title="3:9-3:16: @4.FalseUnwind: falseUnwind -> [real: bb5, cleanup: bb6]
|
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code odd" style="--layer: 1" title="3:9-3:16: @4.FalseUnwind: falseUnwind -> [real: bb5, cleanup: bb6]
|
||||||
3:14-3:16: @5[0]: _3 = const ()"><span class="annotation">@4,5⦊</span>loop {}<span class="annotation">⦉@4,5</span></span></span><span><span class="code even" style="--layer: 1" title="3:16-3:16: @3.Goto: goto -> bb4"><span class="annotation">@1,3⦊</span>‸<span class="annotation">⦉@1,3</span></span></span><span><span class="code odd" style="--layer: 1" title="3:16-3:16: @5.Goto: goto -> bb4"><span class="annotation">@4,5⦊</span>‸<span class="annotation">⦉@4,5</span></span></span><span class="code" style="--layer: 0"></span></span>
|
3:14-3:16: @5[0]: _3 = const ()"><span class="annotation">@4,5⦊</span>loop {}<span class="annotation">⦉@4,5</span></span></span><span><span class="code even" style="--layer: 1" title="3:16-3:16: @3.Goto: goto -> bb4"><span class="annotation">@1,3⦊</span>‸<span class="annotation">⦉@1,3</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> }</span></span>
|
<span class="line"><span class="code" style="--layer: 0"> }</span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code even" style="--layer: 1" title="5:2-5:2: @2.Return: return"><span class="annotation">@2⦊</span>‸<span class="annotation">⦉@2</span></span></span></span></div>
|
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code odd" style="--layer: 1" title="5:2-5:2: @2.Return: return"><span class="annotation">@2⦊</span>‸<span class="annotation">⦉@2</span></span></span></span></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -107,9 +107,9 @@
|
||||||
31:42-31:43: @26[4]: _36 = _33
|
31:42-31:43: @26[4]: _36 = _33
|
||||||
31:42-31:43: @26.Call: _35 = <() as From<()>>::from(move _36) -> [return: bb27, unwind: bb32]"><span class="annotation">@24,26,27,28⦊</span>?<span class="annotation">⦉@24,26,27,28</span></span></span><span class="code" style="--layer: 0">;</span></span>
|
31:42-31:43: @26.Call: _35 = <() as From<()>>::from(move _36) -> [return: bb27, unwind: bb32]"><span class="annotation">@24,26,27,28⦊</span>?<span class="annotation">⦉@24,26,27,28</span></span></span><span class="code" style="--layer: 0">;</span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> }</span><span><span class="code even" style="--layer: 1" title="32:10-32:10: @15.Goto: goto -> bb29"><span class="annotation">@15⦊</span>‸<span class="annotation">⦉@15</span></span></span><span><span class="code odd" style="--layer: 1" title="32:10-32:10: @23.Goto: goto -> bb29"><span class="annotation">@23⦊</span>‸<span class="annotation">⦉@23</span></span></span><span class="code" style="--layer: 0"></span></span>
|
<span class="line"><span class="code" style="--layer: 0"> }</span><span><span class="code even" style="--layer: 1" title="32:10-32:10: @15.Goto: goto -> bb29"><span class="annotation">@15⦊</span>‸<span class="annotation">⦉@15</span></span></span><span><span class="code odd" style="--layer: 1" title="32:10-32:10: @23.Goto: goto -> bb29"><span class="annotation">@23⦊</span>‸<span class="annotation">⦉@23</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> }</span><span><span class="code even" style="--layer: 1" title="33:6-33:6: @1.Goto: goto -> bb2"><span class="annotation">@0,1⦊</span>‸<span class="annotation">⦉@0,1</span></span></span><span><span class="code odd" style="--layer: 1" title="33:6-33:6: @29.Goto: goto -> bb2"><span class="annotation">@29⦊</span>‸<span class="annotation">⦉@29</span></span></span><span class="code" style="--layer: 0"></span></span>
|
<span class="line"><span class="code" style="--layer: 0"> }</span><span><span class="code even" style="--layer: 1" title="33:6-33:6: @29.Goto: goto -> bb2"><span class="annotation">@29⦊</span>‸<span class="annotation">⦉@29</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code even" style="--layer: 1" title="34:8-34:10: @5[9]: _38 = ()
|
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code odd" style="--layer: 1" title="34:8-34:10: @5[9]: _38 = ()
|
||||||
34:5-34:11: @5[10]: _0 = std::result::Result::<(), ()>::Ok(move _38)"><span class="annotation">@5⦊</span>Ok(())<span class="annotation">⦉@5</span></span></span><span class="code" style="--layer: 0"></span></span>
|
34:5-34:11: @5[10]: _0 = std::result::Result::<(), ()>::Ok(move _38)"><span class="annotation">@5⦊</span>Ok(())<span class="annotation">⦉@5</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code odd" style="--layer: 1" title="35:2-35:2: @30.Goto: goto -> bb31"><span class="annotation">@30⦊</span>‸<span class="annotation">⦉@30</span></span></span><span><span class="code even" style="--layer: 1" title="35:2-35:2: @31.Return: return"><span class="annotation">@31⦊</span>‸<span class="annotation">⦉@31</span></span></span></span></div>
|
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code even" style="--layer: 1" title="35:2-35:2: @30.Goto: goto -> bb31"><span class="annotation">@30⦊</span>‸<span class="annotation">⦉@30</span></span></span><span><span class="code odd" style="--layer: 1" title="35:2-35:2: @31.Return: return"><span class="annotation">@31⦊</span>‸<span class="annotation">⦉@31</span></span></span></span></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -65,7 +65,7 @@
|
||||||
<span class="line"><span class="code" style="--layer: 0"> while </span><span><span class="code odd" style="--layer: 1" title="3:11-3:14: @2[2]: _4 = _1
|
<span class="line"><span class="code" style="--layer: 0"> while </span><span><span class="code odd" style="--layer: 1" title="3:11-3:14: @2[2]: _4 = _1
|
||||||
3:11-3:20: @2[3]: _3 = Ge(move _4, const 10_i32)
|
3:11-3:20: @2[3]: _3 = Ge(move _4, const 10_i32)
|
||||||
3:11-3:20: @2[5]: FakeRead(ForMatchedPlace, _3)"><span class="annotation">@1,2⦊</span>num >= 10<span class="annotation">⦉@1,2</span></span></span><span class="code" style="--layer: 0"> </span><span><span class="code even" style="--layer: 1" title="3:21-4:6: @5[0]: _2 = const ()"><span class="annotation">@3,5⦊</span>{</span></span>
|
3:11-3:20: @2[5]: FakeRead(ForMatchedPlace, _3)"><span class="annotation">@1,2⦊</span>num >= 10<span class="annotation">⦉@1,2</span></span></span><span class="code" style="--layer: 0"> </span><span><span class="code even" style="--layer: 1" title="3:21-4:6: @5[0]: _2 = const ()"><span class="annotation">@3,5⦊</span>{</span></span>
|
||||||
<span class="line"><span class="code even" style="--layer: 1" title="3:21-4:6: @5[0]: _2 = const ()"> }<span class="annotation">⦉@3,5</span></span></span><span><span class="code even" style="--layer: 1" title="4:6-4:6: @5.Goto: goto -> bb1"><span class="annotation">@3,5⦊</span>‸<span class="annotation">⦉@3,5</span></span></span><span class="code" style="--layer: 0"></span></span>
|
<span class="line"><span class="code even" style="--layer: 1" title="3:21-4:6: @5[0]: _2 = const ()"> }<span class="annotation">⦉@3,5</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code odd" style="--layer: 1" title="5:2-5:2: @4.Return: return"><span class="annotation">@4⦊</span>‸<span class="annotation">⦉@4</span></span></span></span></div>
|
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code odd" style="--layer: 1" title="5:2-5:2: @4.Return: return"><span class="annotation">@4⦊</span>‸<span class="annotation">⦉@4</span></span></span></span></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -102,16 +102,16 @@
|
||||||
<span class="line"><span class="code" style="--layer: 0"> else</span></span>
|
<span class="line"><span class="code" style="--layer: 0"> else</span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> {</span></span>
|
<span class="line"><span class="code" style="--layer: 0"> {</span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code odd" style="--layer: 1" title="26:21-26:27: @10[0]: _0 = std::result::Result::<(), u8>::Err(const 1_u8)"><span class="annotation">@10⦊</span>Err(1)<span class="annotation">⦉@10</span></span></span><span class="code" style="--layer: 0"></span></span>
|
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code odd" style="--layer: 1" title="26:21-26:27: @10[0]: _0 = std::result::Result::<(), u8>::Err(const 1_u8)"><span class="annotation">@10⦊</span>Err(1)<span class="annotation">⦉@10</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> }</span><span><span class="code even" style="--layer: 1" title="27:18-27:18: @11.Goto: goto -> bb13"><span class="annotation">@9,11⦊</span>‸<span class="annotation">⦉@9,11</span></span></span><span class="code" style="--layer: 0"></span></span>
|
<span class="line"><span class="code" style="--layer: 0"> }</span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> ;</span></span>
|
<span class="line"><span class="code" style="--layer: 0"> ;</span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> }</span></span>
|
<span class="line"><span class="code" style="--layer: 0"> }</span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code odd" style="--layer: 1" title="30:9-32:10: @12[0]: _1 = move (_13.0: i32)"><span class="annotation">@12⦊</span>countdown</span></span>
|
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code even" style="--layer: 1" title="30:9-32:10: @12[0]: _1 = move (_13.0: i32)"><span class="annotation">@12⦊</span>countdown</span></span>
|
||||||
<span class="line"><span class="code odd" style="--layer: 1" title="30:9-32:10: @12[0]: _1 = move (_13.0: i32)"> -=</span></span>
|
<span class="line"><span class="code even" style="--layer: 1" title="30:9-32:10: @12[0]: _1 = move (_13.0: i32)"> -=</span></span>
|
||||||
<span class="line"><span class="code odd" style="--layer: 1" title="30:9-32:10: @12[0]: _1 = move (_13.0: i32)"> 1<span class="annotation">⦉@12</span></span></span><span class="code" style="--layer: 0"></span></span>
|
<span class="line"><span class="code even" style="--layer: 1" title="30:9-32:10: @12[0]: _1 = move (_13.0: i32)"> 1<span class="annotation">⦉@12</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> ;</span></span>
|
<span class="line"><span class="code" style="--layer: 0"> ;</span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> }</span></span>
|
<span class="line"><span class="code" style="--layer: 0"> }</span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code even" style="--layer: 1" title="35:8-35:10: @4[4]: _15 = ()
|
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code odd" style="--layer: 1" title="35:8-35:10: @4[4]: _15 = ()
|
||||||
35:5-35:11: @4[5]: _0 = std::result::Result::<(), u8>::Ok(move _15)"><span class="annotation">@4⦊</span>Ok(())<span class="annotation">⦉@4</span></span></span><span class="code" style="--layer: 0"></span></span>
|
35:5-35:11: @4[5]: _0 = std::result::Result::<(), u8>::Ok(move _15)"><span class="annotation">@4⦊</span>Ok(())<span class="annotation">⦉@4</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code odd" style="--layer: 1" title="36:2-36:2: @13.Goto: goto -> bb14"><span class="annotation">@13⦊</span>‸<span class="annotation">⦉@13</span></span></span><span><span class="code even" style="--layer: 1" title="36:2-36:2: @14.Return: return"><span class="annotation">@14⦊</span>‸<span class="annotation">⦉@14</span></span></span></span></div>
|
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code even" style="--layer: 1" title="36:2-36:2: @13.Goto: goto -> bb14"><span class="annotation">@13⦊</span>‸<span class="annotation">⦉@13</span></span></span><span><span class="code odd" style="--layer: 1" title="36:2-36:2: @14.Return: return"><span class="annotation">@14⦊</span>‸<span class="annotation">⦉@14</span></span></span></span></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -188,32 +188,32 @@
|
||||||
<span class="line"><span class="code even" style="--layer: 1" title="48:9-48:16: @29[0]: _7 = const 400_i32
|
<span class="line"><span class="code even" style="--layer: 1" title="48:9-48:16: @29[0]: _7 = const 400_i32
|
||||||
47:5-50:6: @29[1]: _42 = const ()"> ;</span></span>
|
47:5-50:6: @29[1]: _42 = const ()"> ;</span></span>
|
||||||
<span class="line"><span class="code even" style="--layer: 1" title="48:9-48:16: @29[0]: _7 = const 400_i32
|
<span class="line"><span class="code even" style="--layer: 1" title="48:9-48:16: @29[0]: _7 = const 400_i32
|
||||||
47:5-50:6: @29[1]: _42 = const ()"> }<span class="annotation">⦉@29</span></span></span><span><span class="code odd" style="--layer: 1" title="50:6-50:6: @30.Goto: goto -> bb31"><span class="annotation">@28,30⦊</span>‸<span class="annotation">⦉@28,30</span></span></span><span class="code" style="--layer: 0"></span></span>
|
47:5-50:6: @29[1]: _42 = const ()"> }<span class="annotation">⦉@29</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"></span></span>
|
<span class="line"><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> if </span><span><span class="code even" style="--layer: 1" title="52:9-52:16: @31[5]: _46 = _1
|
<span class="line"><span class="code" style="--layer: 0"> if </span><span><span class="code odd" style="--layer: 1" title="52:9-52:16: @31[5]: _46 = _1
|
||||||
52:8-52:16: @31[6]: _45 = Not(move _46)
|
52:8-52:16: @31[6]: _45 = Not(move _46)
|
||||||
52:8-52:16: @31[8]: FakeRead(ForMatchedPlace, _45)"><span class="annotation">@31⦊</span>!is_true<span class="annotation">⦉@31</span></span></span><span class="code" style="--layer: 0"> </span><span><span class="code odd" style="--layer: 1" title="53:9-53:14: @34[0]: _5 = const 2_i32
|
52:8-52:16: @31[8]: FakeRead(ForMatchedPlace, _45)"><span class="annotation">@31⦊</span>!is_true<span class="annotation">⦉@31</span></span></span><span class="code" style="--layer: 0"> </span><span><span class="code even" style="--layer: 1" title="53:9-53:14: @34[0]: _5 = const 2_i32
|
||||||
52:17-54:6: @34[1]: _44 = const ()
|
52:17-54:6: @34[1]: _44 = const ()
|
||||||
54:6-54:6: @34.Goto: goto -> bb35"><span class="annotation">@32,34⦊</span>{</span></span>
|
54:6-54:6: @34.Goto: goto -> bb35"><span class="annotation">@32,34⦊</span>{</span></span>
|
||||||
<span class="line"><span class="code odd" style="--layer: 1" title="53:9-53:14: @34[0]: _5 = const 2_i32
|
<span class="line"><span class="code even" style="--layer: 1" title="53:9-53:14: @34[0]: _5 = const 2_i32
|
||||||
52:17-54:6: @34[1]: _44 = const ()
|
52:17-54:6: @34[1]: _44 = const ()
|
||||||
54:6-54:6: @34.Goto: goto -> bb35"> a = 2;</span></span>
|
54:6-54:6: @34.Goto: goto -> bb35"> a = 2;</span></span>
|
||||||
<span class="line"><span class="code odd" style="--layer: 1" title="53:9-53:14: @34[0]: _5 = const 2_i32
|
<span class="line"><span class="code even" style="--layer: 1" title="53:9-53:14: @34[0]: _5 = const 2_i32
|
||||||
52:17-54:6: @34[1]: _44 = const ()
|
52:17-54:6: @34[1]: _44 = const ()
|
||||||
54:6-54:6: @34.Goto: goto -> bb35"> }<span class="annotation">⦉@32,34</span></span></span><span><span class="code even" style="--layer: 1" title="54:6-54:6: @33.Goto: goto -> bb35"><span class="annotation">@33⦊</span>‸<span class="annotation">⦉@33</span></span></span><span class="code" style="--layer: 0"></span></span>
|
54:6-54:6: @34.Goto: goto -> bb35"> }<span class="annotation">⦉@32,34</span></span></span><span><span class="code odd" style="--layer: 1" title="54:6-54:6: @33.Goto: goto -> bb35"><span class="annotation">@33⦊</span>‸<span class="annotation">⦉@33</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"></span></span>
|
<span class="line"><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> if </span><span><span class="code odd" style="--layer: 1" title="56:8-56:15: @35[3]: _47 = _1
|
<span class="line"><span class="code" style="--layer: 0"> if </span><span><span class="code even" style="--layer: 1" title="56:8-56:15: @35[3]: _47 = _1
|
||||||
56:8-56:15: @35[4]: FakeRead(ForMatchedPlace, _47)"><span class="annotation">@35⦊</span>is_true<span class="annotation">⦉@35</span></span></span><span class="code" style="--layer: 0"> </span><span><span class="code even" style="--layer: 1" title="57:9-57:15: @38[0]: _6 = const 30_i32
|
56:8-56:15: @35[4]: FakeRead(ForMatchedPlace, _47)"><span class="annotation">@35⦊</span>is_true<span class="annotation">⦉@35</span></span></span><span class="code" style="--layer: 0"> </span><span><span class="code odd" style="--layer: 1" title="57:9-57:15: @38[0]: _6 = const 30_i32
|
||||||
56:16-58:6: @38[1]: _0 = const ()"><span class="annotation">@36,38⦊</span>{</span></span>
|
56:16-58:6: @38[1]: _0 = const ()"><span class="annotation">@36,38⦊</span>{</span></span>
|
||||||
<span class="line"><span class="code even" style="--layer: 1" title="57:9-57:15: @38[0]: _6 = const 30_i32
|
<span class="line"><span class="code odd" style="--layer: 1" title="57:9-57:15: @38[0]: _6 = const 30_i32
|
||||||
56:16-58:6: @38[1]: _0 = const ()"> b = 30;</span></span>
|
56:16-58:6: @38[1]: _0 = const ()"> b = 30;</span></span>
|
||||||
<span class="line"><span class="code even" style="--layer: 1" title="57:9-57:15: @38[0]: _6 = const 30_i32
|
<span class="line"><span class="code odd" style="--layer: 1" title="57:9-57:15: @38[0]: _6 = const 30_i32
|
||||||
56:16-58:6: @38[1]: _0 = const ()"> }<span class="annotation">⦉@36,38</span></span></span><span class="code" style="--layer: 0"> else </span><span><span class="code odd" style="--layer: 1" title="59:9-59:16: @37[0]: _7 = const 400_i32
|
56:16-58:6: @38[1]: _0 = const ()"> }<span class="annotation">⦉@36,38</span></span></span><span class="code" style="--layer: 0"> else </span><span><span class="code even" style="--layer: 1" title="59:9-59:16: @37[0]: _7 = const 400_i32
|
||||||
58:12-60:6: @37[1]: _0 = const ()"><span class="annotation">@37⦊</span>{</span></span>
|
58:12-60:6: @37[1]: _0 = const ()"><span class="annotation">@37⦊</span>{</span></span>
|
||||||
<span class="line"><span class="code odd" style="--layer: 1" title="59:9-59:16: @37[0]: _7 = const 400_i32
|
<span class="line"><span class="code even" style="--layer: 1" title="59:9-59:16: @37[0]: _7 = const 400_i32
|
||||||
58:12-60:6: @37[1]: _0 = const ()"> c = 400;</span></span>
|
58:12-60:6: @37[1]: _0 = const ()"> c = 400;</span></span>
|
||||||
<span class="line"><span class="code odd" style="--layer: 1" title="59:9-59:16: @37[0]: _7 = const 400_i32
|
<span class="line"><span class="code even" style="--layer: 1" title="59:9-59:16: @37[0]: _7 = const 400_i32
|
||||||
58:12-60:6: @37[1]: _0 = const ()"> }<span class="annotation">⦉@37</span></span></span><span><span class="code even" style="--layer: 1" title="60:6-60:6: @38.Goto: goto -> bb39"><span class="annotation">@36,38⦊</span>‸<span class="annotation">⦉@36,38</span></span></span><span class="code" style="--layer: 0"></span></span>
|
58:12-60:6: @37[1]: _0 = const ()"> }<span class="annotation">⦉@37</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code odd" style="--layer: 1" title="61:2-61:2: @39.Return: return"><span class="annotation">@39⦊</span>‸<span class="annotation">⦉@39</span></span></span></span></div>
|
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code odd" style="--layer: 1" title="61:2-61:2: @39.Return: return"><span class="annotation">@39⦊</span>‸<span class="annotation">⦉@39</span></span></span></span></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -89,6 +89,6 @@
|
||||||
<span class="line"><span class="code even" style="--layer: 1" title="16:16-17:10: @2[0]: _3 = const ()"> }<span class="annotation">⦉@2</span></span></span><span><span class="code odd" style="--layer: 1" title="17:10-17:10: @15.Goto: goto -> bb21"><span class="annotation">@15⦊</span>‸<span class="annotation">⦉@15</span></span></span><span class="code" style="--layer: 0"></span></span>
|
<span class="line"><span class="code even" style="--layer: 1" title="16:16-17:10: @2[0]: _3 = const ()"> }<span class="annotation">⦉@2</span></span></span><span><span class="code odd" style="--layer: 1" title="17:10-17:10: @15.Goto: goto -> bb21"><span class="annotation">@15⦊</span>‸<span class="annotation">⦉@15</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code even" style="--layer: 1" title="18:12-18:14: @21[3]: _30 = ()
|
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code even" style="--layer: 1" title="18:12-18:14: @21[3]: _30 = ()
|
||||||
18:9-18:15: @21[4]: _0 = std::result::Result::<(), std::fmt::Error>::Ok(move _30)"><span class="annotation">@21⦊</span>Ok(())<span class="annotation">⦉@21</span></span></span><span class="code" style="--layer: 0"></span></span>
|
18:9-18:15: @21[4]: _0 = std::result::Result::<(), std::fmt::Error>::Ok(move _30)"><span class="annotation">@21⦊</span>Ok(())<span class="annotation">⦉@21</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> }</span><span><span class="code odd" style="--layer: 1" title="19:6-19:6: @20.Goto: goto -> bb22"><span class="annotation">@16,18,19,20⦊</span>‸<span class="annotation">⦉@16,18,19,20</span></span></span><span><span class="code even" style="--layer: 1" title="19:6-19:6: @22.Return: return"><span class="annotation">@22⦊</span>‸<span class="annotation">⦉@22</span></span></span></span></div>
|
<span class="line"><span class="code" style="--layer: 0"> }</span><span><span class="code odd" style="--layer: 1" title="19:6-19:6: @22.Return: return"><span class="annotation">@22⦊</span>‸<span class="annotation">⦉@22</span></span></span></span></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -117,9 +117,9 @@
|
||||||
21:14-21:14: @29.Goto: goto -> bb30"> }</span></span>
|
21:14-21:14: @29.Goto: goto -> bb30"> }</span></span>
|
||||||
<span class="line"><span class="code odd" style="--layer: 1" title="19:21-19:27: @29[0]: _9 = move (_36.0: i32)
|
<span class="line"><span class="code odd" style="--layer: 1" title="19:21-19:27: @29[0]: _9 = move (_36.0: i32)
|
||||||
21:14-21:14: @29.Goto: goto -> bb30"> }<span class="annotation">⦉@29</span></span></span><span><span class="code even" style="--layer: 1" title="21:14-21:14: @23.Goto: goto -> bb30"><span class="annotation">@23⦊</span>‸<span class="annotation">⦉@23</span></span></span><span class="code" style="--layer: 0"></span></span>
|
21:14-21:14: @29.Goto: goto -> bb30"> }<span class="annotation">⦉@29</span></span></span><span><span class="code even" style="--layer: 1" title="21:14-21:14: @23.Goto: goto -> bb30"><span class="annotation">@23⦊</span>‸<span class="annotation">⦉@23</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> }</span><span><span class="code odd" style="--layer: 1" title="22:10-22:10: @9.Goto: goto -> bb10"><span class="annotation">@6,8,9⦊</span>‸<span class="annotation">⦉@6,8,9</span></span></span><span><span class="code even" style="--layer: 1" title="22:10-22:10: @30.Goto: goto -> bb10"><span class="annotation">@30⦊</span>‸<span class="annotation">⦉@30</span></span></span><span class="code" style="--layer: 0"></span></span>
|
<span class="line"><span class="code" style="--layer: 0"> }</span><span><span class="code odd" style="--layer: 1" title="22:10-22:10: @30.Goto: goto -> bb10"><span class="annotation">@30⦊</span>‸<span class="annotation">⦉@30</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code odd" style="--layer: 1" title="23:9-23:23: @32[0]: _5 = move (_37.0: i32)"><span class="annotation">@32⦊</span>countdown -= 1<span class="annotation">⦉@32</span></span></span><span class="code" style="--layer: 0">;</span></span>
|
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code even" style="--layer: 1" title="23:9-23:23: @32[0]: _5 = move (_37.0: i32)"><span class="annotation">@32⦊</span>countdown -= 1<span class="annotation">⦉@32</span></span></span><span class="code" style="--layer: 0">;</span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> }</span><span><span class="code even" style="--layer: 1" title="24:6-24:6: @3.Goto: goto -> bb4"><span class="annotation">@0,1,2,3⦊</span>‸<span class="annotation">⦉@0,1,2,3</span></span></span><span><span class="code odd" style="--layer: 1" title="24:6-24:6: @7.Goto: goto -> bb33"><span class="annotation">@7⦊</span>‸<span class="annotation">⦉@7</span></span></span><span class="code" style="--layer: 0"></span></span>
|
<span class="line"><span class="code" style="--layer: 0"> }</span><span><span class="code odd" style="--layer: 1" title="24:6-24:6: @7.Goto: goto -> bb33"><span class="annotation">@7⦊</span>‸<span class="annotation">⦉@7</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code even" style="--layer: 1" title="25:2-25:2: @33.Return: return"><span class="annotation">@33⦊</span>‸<span class="annotation">⦉@33</span></span></span></span></div>
|
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code even" style="--layer: 1" title="25:2-25:2: @33.Return: return"><span class="annotation">@33⦊</span>‸<span class="annotation">⦉@33</span></span></span></span></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -60,11 +60,7 @@
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="code" style="counter-reset: line 3"><span class="line"> <span><span class="code even" style="--layer: 1" title="4:51-4:54: @14.Goto: goto -> bb15"><span class="annotation">@14⦊</span></span></span><span class="code even" style="--layer: 2" title="4:51-4:54: @12[0]: _0 = Equal
|
<div class="code" style="counter-reset: line 3"><span class="line"> <span><span class="code even" style="--layer: 1" title="4:51-4:54: @14.Goto: goto -> bb15"><span class="annotation">@14⦊</span></span></span><span class="code even" style="--layer: 2" title="4:51-4:54: @12[0]: _0 = Equal
|
||||||
4:51-4:54: @12.Goto: goto -> bb13"><span class="annotation">@11,12⦊</span></span><span class="code even" style="--layer: 3" title="4:51-4:54: @10[1]: _27 = _21
|
4:51-4:54: @12.Goto: goto -> bb13"><span class="annotation">@11,12⦊</span></span><span class="code even" style="--layer: 3" title="4:51-4:54: @13.Goto: goto -> bb14"><span class="annotation">@13⦊</span>Ord<span class="annotation">⦉@13</span></span><span class="code even" style="--layer: 2" title="4:51-4:54: @12[0]: _0 = Equal
|
||||||
4:51-4:54: @10[2]: _0 = _27
|
|
||||||
4:51-4:54: @10.Goto: goto -> bb13"><span class="annotation">@10⦊</span></span><span class="code even" style="--layer: 4" title="4:51-4:54: @13.Goto: goto -> bb14"><span class="annotation">@13⦊</span>Ord<span class="annotation">⦉@13</span></span><span class="code even" style="--layer: 3" title="4:51-4:54: @10[1]: _27 = _21
|
|
||||||
4:51-4:54: @10[2]: _0 = _27
|
|
||||||
4:51-4:54: @10.Goto: goto -> bb13"><span class="annotation">⦉@10</span></span><span class="code even" style="--layer: 2" title="4:51-4:54: @12[0]: _0 = Equal
|
|
||||||
4:51-4:54: @12.Goto: goto -> bb13"><span class="annotation">⦉@11,12</span></span><span><span class="code even" style="--layer: 1" title="4:51-4:54: @14.Goto: goto -> bb15"><span class="annotation">⦉@14</span></span></span><span><span class="code odd" style="--layer: 1" title="4:54-4:54: @15.Return: return"><span class="annotation">@15⦊</span>‸<span class="annotation">⦉@15</span></span></span></span></div>
|
4:51-4:54: @12.Goto: goto -> bb13"><span class="annotation">⦉@11,12</span></span><span><span class="code even" style="--layer: 1" title="4:51-4:54: @14.Goto: goto -> bb15"><span class="annotation">⦉@14</span></span></span><span><span class="code odd" style="--layer: 1" title="4:54-4:54: @15.Return: return"><span class="annotation">@15⦊</span>‸<span class="annotation">⦉@15</span></span></span></span></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -61,11 +61,7 @@
|
||||||
<body>
|
<body>
|
||||||
<div class="code" style="counter-reset: line 3"><span class="line"> <span><span class="code even" style="--layer: 1" title="4:39-4:49: @17.Goto: goto -> bb18"><span class="annotation">@17⦊</span></span></span><span class="code even" style="--layer: 2" title="4:39-4:49: @15[1]: _30 = Equal
|
<div class="code" style="counter-reset: line 3"><span class="line"> <span><span class="code even" style="--layer: 1" title="4:39-4:49: @17.Goto: goto -> bb18"><span class="annotation">@17⦊</span></span></span><span class="code even" style="--layer: 2" title="4:39-4:49: @15[1]: _30 = Equal
|
||||||
4:39-4:49: @15[2]: _0 = Option::<std::cmp::Ordering>::Some(move _30)
|
4:39-4:49: @15[2]: _0 = Option::<std::cmp::Ordering>::Some(move _30)
|
||||||
4:39-4:49: @15.Goto: goto -> bb16"><span class="annotation">@14,15⦊</span></span><span class="code even" style="--layer: 3" title="4:39-4:49: @12[1]: _31 = _23
|
4:39-4:49: @15.Goto: goto -> bb16"><span class="annotation">@14,15⦊</span></span><span class="code even" style="--layer: 3" title="4:39-4:49: @16.Goto: goto -> bb17"><span class="annotation">@16⦊</span>PartialOrd<span class="annotation">⦉@16</span></span><span class="code even" style="--layer: 2" title="4:39-4:49: @15[1]: _30 = Equal
|
||||||
4:39-4:49: @12[2]: _0 = _31
|
|
||||||
4:39-4:49: @12.Goto: goto -> bb16"><span class="annotation">@12⦊</span></span><span class="code even" style="--layer: 4" title="4:39-4:49: @16.Goto: goto -> bb17"><span class="annotation">@16⦊</span>PartialOrd<span class="annotation">⦉@16</span></span><span class="code even" style="--layer: 3" title="4:39-4:49: @12[1]: _31 = _23
|
|
||||||
4:39-4:49: @12[2]: _0 = _31
|
|
||||||
4:39-4:49: @12.Goto: goto -> bb16"><span class="annotation">⦉@12</span></span><span class="code even" style="--layer: 2" title="4:39-4:49: @15[1]: _30 = Equal
|
|
||||||
4:39-4:49: @15[2]: _0 = Option::<std::cmp::Ordering>::Some(move _30)
|
4:39-4:49: @15[2]: _0 = Option::<std::cmp::Ordering>::Some(move _30)
|
||||||
4:39-4:49: @15.Goto: goto -> bb16"><span class="annotation">⦉@14,15</span></span><span><span class="code even" style="--layer: 1" title="4:39-4:49: @17.Goto: goto -> bb18"><span class="annotation">⦉@17</span></span></span><span><span class="code odd" style="--layer: 1" title="4:49-4:49: @18.Return: return"><span class="annotation">@18⦊</span>‸<span class="annotation">⦉@18</span></span></span></span></div>
|
4:39-4:49: @15.Goto: goto -> bb16"><span class="annotation">⦉@14,15</span></span><span><span class="code even" style="--layer: 1" title="4:39-4:49: @17.Goto: goto -> bb18"><span class="annotation">⦉@17</span></span></span><span><span class="code odd" style="--layer: 1" title="4:49-4:49: @18.Return: return"><span class="annotation">@18⦊</span>‸<span class="annotation">⦉@18</span></span></span></span></div>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
@ -63,8 +63,8 @@
|
||||||
<span class="line"><span class="code" style="--layer: 0"> if </span><span><span class="code even" style="--layer: 1" title="2:8-2:13: @0[1]: _1 = const false
|
<span class="line"><span class="code" style="--layer: 0"> if </span><span><span class="code even" style="--layer: 1" title="2:8-2:13: @0[1]: _1 = const false
|
||||||
2:8-2:13: @0[2]: FakeRead(ForMatchedPlace, _1)"><span class="annotation">@0⦊</span>false<span class="annotation">⦉@0</span></span></span><span class="code" style="--layer: 0"> {</span></span>
|
2:8-2:13: @0[2]: FakeRead(ForMatchedPlace, _1)"><span class="annotation">@0⦊</span>false<span class="annotation">⦉@0</span></span></span><span class="code" style="--layer: 0"> {</span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code odd" style="--layer: 1" title="3:9-3:16: @4.FalseUnwind: falseUnwind -> [real: bb5, cleanup: bb6]
|
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code odd" style="--layer: 1" title="3:9-3:16: @4.FalseUnwind: falseUnwind -> [real: bb5, cleanup: bb6]
|
||||||
3:14-3:16: @5[0]: _3 = const ()"><span class="annotation">@4,5⦊</span>loop {}<span class="annotation">⦉@4,5</span></span></span><span><span class="code even" style="--layer: 1" title="3:16-3:16: @3.Goto: goto -> bb4"><span class="annotation">@1,3⦊</span>‸<span class="annotation">⦉@1,3</span></span></span><span><span class="code odd" style="--layer: 1" title="3:16-3:16: @5.Goto: goto -> bb4"><span class="annotation">@4,5⦊</span>‸<span class="annotation">⦉@4,5</span></span></span><span class="code" style="--layer: 0"></span></span>
|
3:14-3:16: @5[0]: _3 = const ()"><span class="annotation">@4,5⦊</span>loop {}<span class="annotation">⦉@4,5</span></span></span><span><span class="code even" style="--layer: 1" title="3:16-3:16: @3.Goto: goto -> bb4"><span class="annotation">@1,3⦊</span>‸<span class="annotation">⦉@1,3</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> }</span></span>
|
<span class="line"><span class="code" style="--layer: 0"> }</span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code even" style="--layer: 1" title="5:2-5:2: @2.Return: return"><span class="annotation">@2⦊</span>‸<span class="annotation">⦉@2</span></span></span></span></div>
|
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code odd" style="--layer: 1" title="5:2-5:2: @2.Return: return"><span class="annotation">@2⦊</span>‸<span class="annotation">⦉@2</span></span></span></span></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -107,9 +107,9 @@
|
||||||
31:42-31:43: @26[4]: _36 = _33
|
31:42-31:43: @26[4]: _36 = _33
|
||||||
31:42-31:43: @26.Call: _35 = <() as From<()>>::from(move _36) -> [return: bb27, unwind: bb32]"><span class="annotation">@24,26,27,28⦊</span>?<span class="annotation">⦉@24,26,27,28</span></span></span><span class="code" style="--layer: 0">;</span></span>
|
31:42-31:43: @26.Call: _35 = <() as From<()>>::from(move _36) -> [return: bb27, unwind: bb32]"><span class="annotation">@24,26,27,28⦊</span>?<span class="annotation">⦉@24,26,27,28</span></span></span><span class="code" style="--layer: 0">;</span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> }</span><span><span class="code even" style="--layer: 1" title="32:10-32:10: @15.Goto: goto -> bb29"><span class="annotation">@15⦊</span>‸<span class="annotation">⦉@15</span></span></span><span><span class="code odd" style="--layer: 1" title="32:10-32:10: @23.Goto: goto -> bb29"><span class="annotation">@23⦊</span>‸<span class="annotation">⦉@23</span></span></span><span class="code" style="--layer: 0"></span></span>
|
<span class="line"><span class="code" style="--layer: 0"> }</span><span><span class="code even" style="--layer: 1" title="32:10-32:10: @15.Goto: goto -> bb29"><span class="annotation">@15⦊</span>‸<span class="annotation">⦉@15</span></span></span><span><span class="code odd" style="--layer: 1" title="32:10-32:10: @23.Goto: goto -> bb29"><span class="annotation">@23⦊</span>‸<span class="annotation">⦉@23</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> }</span><span><span class="code even" style="--layer: 1" title="33:6-33:6: @1.Goto: goto -> bb2"><span class="annotation">@0,1⦊</span>‸<span class="annotation">⦉@0,1</span></span></span><span><span class="code odd" style="--layer: 1" title="33:6-33:6: @29.Goto: goto -> bb2"><span class="annotation">@29⦊</span>‸<span class="annotation">⦉@29</span></span></span><span class="code" style="--layer: 0"></span></span>
|
<span class="line"><span class="code" style="--layer: 0"> }</span><span><span class="code even" style="--layer: 1" title="33:6-33:6: @29.Goto: goto -> bb2"><span class="annotation">@29⦊</span>‸<span class="annotation">⦉@29</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code even" style="--layer: 1" title="34:8-34:10: @5[9]: _38 = ()
|
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code odd" style="--layer: 1" title="34:8-34:10: @5[9]: _38 = ()
|
||||||
34:5-34:11: @5[10]: _0 = std::result::Result::<(), ()>::Ok(move _38)"><span class="annotation">@5⦊</span>Ok(())<span class="annotation">⦉@5</span></span></span><span class="code" style="--layer: 0"></span></span>
|
34:5-34:11: @5[10]: _0 = std::result::Result::<(), ()>::Ok(move _38)"><span class="annotation">@5⦊</span>Ok(())<span class="annotation">⦉@5</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code odd" style="--layer: 1" title="35:2-35:2: @30.Goto: goto -> bb31"><span class="annotation">@30⦊</span>‸<span class="annotation">⦉@30</span></span></span><span><span class="code even" style="--layer: 1" title="35:2-35:2: @31.Return: return"><span class="annotation">@31⦊</span>‸<span class="annotation">⦉@31</span></span></span></span></div>
|
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code even" style="--layer: 1" title="35:2-35:2: @30.Goto: goto -> bb31"><span class="annotation">@30⦊</span>‸<span class="annotation">⦉@30</span></span></span><span><span class="code odd" style="--layer: 1" title="35:2-35:2: @31.Return: return"><span class="annotation">@31⦊</span>‸<span class="annotation">⦉@31</span></span></span></span></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -65,7 +65,7 @@
|
||||||
<span class="line"><span class="code" style="--layer: 0"> while </span><span><span class="code odd" style="--layer: 1" title="3:11-3:14: @2[2]: _4 = _1
|
<span class="line"><span class="code" style="--layer: 0"> while </span><span><span class="code odd" style="--layer: 1" title="3:11-3:14: @2[2]: _4 = _1
|
||||||
3:11-3:20: @2[3]: _3 = Ge(move _4, const 10_i32)
|
3:11-3:20: @2[3]: _3 = Ge(move _4, const 10_i32)
|
||||||
3:11-3:20: @2[5]: FakeRead(ForMatchedPlace, _3)"><span class="annotation">@1,2⦊</span>num >= 10<span class="annotation">⦉@1,2</span></span></span><span class="code" style="--layer: 0"> </span><span><span class="code even" style="--layer: 1" title="3:21-4:6: @5[0]: _2 = const ()"><span class="annotation">@3,5⦊</span>{</span></span>
|
3:11-3:20: @2[5]: FakeRead(ForMatchedPlace, _3)"><span class="annotation">@1,2⦊</span>num >= 10<span class="annotation">⦉@1,2</span></span></span><span class="code" style="--layer: 0"> </span><span><span class="code even" style="--layer: 1" title="3:21-4:6: @5[0]: _2 = const ()"><span class="annotation">@3,5⦊</span>{</span></span>
|
||||||
<span class="line"><span class="code even" style="--layer: 1" title="3:21-4:6: @5[0]: _2 = const ()"> }<span class="annotation">⦉@3,5</span></span></span><span><span class="code even" style="--layer: 1" title="4:6-4:6: @5.Goto: goto -> bb1"><span class="annotation">@3,5⦊</span>‸<span class="annotation">⦉@3,5</span></span></span><span class="code" style="--layer: 0"></span></span>
|
<span class="line"><span class="code even" style="--layer: 1" title="3:21-4:6: @5[0]: _2 = const ()"> }<span class="annotation">⦉@3,5</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code odd" style="--layer: 1" title="5:2-5:2: @4.Return: return"><span class="annotation">@4⦊</span>‸<span class="annotation">⦉@4</span></span></span></span></div>
|
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code odd" style="--layer: 1" title="5:2-5:2: @4.Return: return"><span class="annotation">@4⦊</span>‸<span class="annotation">⦉@4</span></span></span></span></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -102,16 +102,16 @@
|
||||||
<span class="line"><span class="code" style="--layer: 0"> else</span></span>
|
<span class="line"><span class="code" style="--layer: 0"> else</span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> {</span></span>
|
<span class="line"><span class="code" style="--layer: 0"> {</span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code odd" style="--layer: 1" title="26:21-26:27: @10[0]: _0 = std::result::Result::<(), u8>::Err(const 1_u8)"><span class="annotation">@10⦊</span>Err(1)<span class="annotation">⦉@10</span></span></span><span class="code" style="--layer: 0"></span></span>
|
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code odd" style="--layer: 1" title="26:21-26:27: @10[0]: _0 = std::result::Result::<(), u8>::Err(const 1_u8)"><span class="annotation">@10⦊</span>Err(1)<span class="annotation">⦉@10</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> }</span><span><span class="code even" style="--layer: 1" title="27:18-27:18: @11.Goto: goto -> bb13"><span class="annotation">@9,11⦊</span>‸<span class="annotation">⦉@9,11</span></span></span><span class="code" style="--layer: 0"></span></span>
|
<span class="line"><span class="code" style="--layer: 0"> }</span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> ;</span></span>
|
<span class="line"><span class="code" style="--layer: 0"> ;</span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> }</span></span>
|
<span class="line"><span class="code" style="--layer: 0"> }</span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code odd" style="--layer: 1" title="30:9-32:10: @12[0]: _1 = move (_13.0: i32)"><span class="annotation">@12⦊</span>countdown</span></span>
|
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code even" style="--layer: 1" title="30:9-32:10: @12[0]: _1 = move (_13.0: i32)"><span class="annotation">@12⦊</span>countdown</span></span>
|
||||||
<span class="line"><span class="code odd" style="--layer: 1" title="30:9-32:10: @12[0]: _1 = move (_13.0: i32)"> -=</span></span>
|
<span class="line"><span class="code even" style="--layer: 1" title="30:9-32:10: @12[0]: _1 = move (_13.0: i32)"> -=</span></span>
|
||||||
<span class="line"><span class="code odd" style="--layer: 1" title="30:9-32:10: @12[0]: _1 = move (_13.0: i32)"> 1<span class="annotation">⦉@12</span></span></span><span class="code" style="--layer: 0"></span></span>
|
<span class="line"><span class="code even" style="--layer: 1" title="30:9-32:10: @12[0]: _1 = move (_13.0: i32)"> 1<span class="annotation">⦉@12</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> ;</span></span>
|
<span class="line"><span class="code" style="--layer: 0"> ;</span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> }</span></span>
|
<span class="line"><span class="code" style="--layer: 0"> }</span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code even" style="--layer: 1" title="35:8-35:10: @4[4]: _15 = ()
|
<span class="line"><span class="code" style="--layer: 0"> </span><span><span class="code odd" style="--layer: 1" title="35:8-35:10: @4[4]: _15 = ()
|
||||||
35:5-35:11: @4[5]: _0 = std::result::Result::<(), u8>::Ok(move _15)"><span class="annotation">@4⦊</span>Ok(())<span class="annotation">⦉@4</span></span></span><span class="code" style="--layer: 0"></span></span>
|
35:5-35:11: @4[5]: _0 = std::result::Result::<(), u8>::Ok(move _15)"><span class="annotation">@4⦊</span>Ok(())<span class="annotation">⦉@4</span></span></span><span class="code" style="--layer: 0"></span></span>
|
||||||
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code odd" style="--layer: 1" title="36:2-36:2: @13.Goto: goto -> bb14"><span class="annotation">@13⦊</span>‸<span class="annotation">⦉@13</span></span></span><span><span class="code even" style="--layer: 1" title="36:2-36:2: @14.Return: return"><span class="annotation">@14⦊</span>‸<span class="annotation">⦉@14</span></span></span></span></div>
|
<span class="line"><span class="code" style="--layer: 0">}</span><span><span class="code even" style="--layer: 1" title="36:2-36:2: @13.Goto: goto -> bb14"><span class="annotation">@13⦊</span>‸<span class="annotation">⦉@13</span></span></span><span><span class="code odd" style="--layer: 1" title="36:2-36:2: @14.Return: return"><span class="annotation">@14⦊</span>‸<span class="annotation">⦉@14</span></span></span></span></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue