mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 23:04:33 +00:00
Auto merge of #120187 - Nadrieril:rollup-xfwrb0c, r=Nadrieril
Rollup of 8 pull requests Successful merges: - #116090 (Implement strict integer operations that panic on overflow) - #118811 (Use `bool` instead of `PartiolOrd` as return value of the comparison closure in `{slice,Iteraotr}::is_sorted_by`) - #119081 (Add Ipv6Addr::is_ipv4_mapped) - #119461 (Use an interpreter in MIR jump threading) - #119996 (Move OS String implementation into `sys`) - #120015 (coverage: Format all coverage tests with `rustfmt`) - #120027 (pattern_analysis: Remove `Ty: Copy` bound) - #120084 (fix(rust-analyzer): use new pkgid spec to compare) r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
cb25c5bc3d
@ -1130,7 +1130,7 @@ fn collect_non_exhaustive_tys<'tcx>(
|
||||
non_exhaustive_tys.insert(pat.ty().inner());
|
||||
}
|
||||
if let Constructor::IntRange(range) = pat.ctor() {
|
||||
if cx.is_range_beyond_boundaries(range, pat.ty()) {
|
||||
if cx.is_range_beyond_boundaries(range, *pat.ty()) {
|
||||
// The range denotes the values before `isize::MIN` or the values after `usize::MAX`/`isize::MAX`.
|
||||
non_exhaustive_tys.insert(pat.ty().inner());
|
||||
}
|
||||
|
@ -36,16 +36,21 @@
|
||||
//! cost by `MAX_COST`.
|
||||
|
||||
use rustc_arena::DroplessArena;
|
||||
use rustc_const_eval::interpret::{ImmTy, Immediate, InterpCx, OpTy, Projectable};
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_index::bit_set::BitSet;
|
||||
use rustc_index::IndexVec;
|
||||
use rustc_middle::mir::interpret::Scalar;
|
||||
use rustc_middle::mir::visit::Visitor;
|
||||
use rustc_middle::mir::*;
|
||||
use rustc_middle::ty::{self, ScalarInt, Ty, TyCtxt};
|
||||
use rustc_middle::ty::layout::LayoutOf;
|
||||
use rustc_middle::ty::{self, ScalarInt, TyCtxt};
|
||||
use rustc_mir_dataflow::value_analysis::{Map, PlaceIndex, State, TrackElem};
|
||||
use rustc_span::DUMMY_SP;
|
||||
use rustc_target::abi::{TagEncoding, Variants};
|
||||
|
||||
use crate::cost_checker::CostChecker;
|
||||
use crate::dataflow_const_prop::DummyMachine;
|
||||
|
||||
pub struct JumpThreading;
|
||||
|
||||
@ -71,6 +76,7 @@ impl<'tcx> MirPass<'tcx> for JumpThreading {
|
||||
let mut finder = TOFinder {
|
||||
tcx,
|
||||
param_env,
|
||||
ecx: InterpCx::new(tcx, DUMMY_SP, param_env, DummyMachine),
|
||||
body,
|
||||
arena: &arena,
|
||||
map: &map,
|
||||
@ -88,7 +94,7 @@ impl<'tcx> MirPass<'tcx> for JumpThreading {
|
||||
debug!(?discr, ?bb);
|
||||
|
||||
let discr_ty = discr.ty(body, tcx).ty;
|
||||
let Ok(discr_layout) = tcx.layout_of(param_env.and(discr_ty)) else { continue };
|
||||
let Ok(discr_layout) = finder.ecx.layout_of(discr_ty) else { continue };
|
||||
|
||||
let Some(discr) = finder.map.find(discr.as_ref()) else { continue };
|
||||
debug!(?discr);
|
||||
@ -142,6 +148,7 @@ struct ThreadingOpportunity {
|
||||
struct TOFinder<'tcx, 'a> {
|
||||
tcx: TyCtxt<'tcx>,
|
||||
param_env: ty::ParamEnv<'tcx>,
|
||||
ecx: InterpCx<'tcx, 'tcx, DummyMachine>,
|
||||
body: &'a Body<'tcx>,
|
||||
map: &'a Map,
|
||||
loop_headers: &'a BitSet<BasicBlock>,
|
||||
@ -329,11 +336,11 @@ impl<'tcx, 'a> TOFinder<'tcx, 'a> {
|
||||
}
|
||||
|
||||
#[instrument(level = "trace", skip(self))]
|
||||
fn process_operand(
|
||||
fn process_immediate(
|
||||
&mut self,
|
||||
bb: BasicBlock,
|
||||
lhs: PlaceIndex,
|
||||
rhs: &Operand<'tcx>,
|
||||
rhs: ImmTy<'tcx>,
|
||||
state: &mut State<ConditionSet<'a>>,
|
||||
) -> Option<!> {
|
||||
let register_opportunity = |c: Condition| {
|
||||
@ -341,13 +348,70 @@ impl<'tcx, 'a> TOFinder<'tcx, 'a> {
|
||||
self.opportunities.push(ThreadingOpportunity { chain: vec![bb], target: c.target })
|
||||
};
|
||||
|
||||
let conditions = state.try_get_idx(lhs, self.map)?;
|
||||
if let Immediate::Scalar(Scalar::Int(int)) = *rhs {
|
||||
conditions.iter_matches(int).for_each(register_opportunity);
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
/// If we expect `lhs ?= A`, we have an opportunity if we assume `constant == A`.
|
||||
#[instrument(level = "trace", skip(self))]
|
||||
fn process_constant(
|
||||
&mut self,
|
||||
bb: BasicBlock,
|
||||
lhs: PlaceIndex,
|
||||
constant: OpTy<'tcx>,
|
||||
state: &mut State<ConditionSet<'a>>,
|
||||
) {
|
||||
self.map.for_each_projection_value(
|
||||
lhs,
|
||||
constant,
|
||||
&mut |elem, op| match elem {
|
||||
TrackElem::Field(idx) => self.ecx.project_field(op, idx.as_usize()).ok(),
|
||||
TrackElem::Variant(idx) => self.ecx.project_downcast(op, idx).ok(),
|
||||
TrackElem::Discriminant => {
|
||||
let variant = self.ecx.read_discriminant(op).ok()?;
|
||||
let discr_value =
|
||||
self.ecx.discriminant_for_variant(op.layout.ty, variant).ok()?;
|
||||
Some(discr_value.into())
|
||||
}
|
||||
TrackElem::DerefLen => {
|
||||
let op: OpTy<'_> = self.ecx.deref_pointer(op).ok()?.into();
|
||||
let len_usize = op.len(&self.ecx).ok()?;
|
||||
let layout = self.ecx.layout_of(self.tcx.types.usize).unwrap();
|
||||
Some(ImmTy::from_uint(len_usize, layout).into())
|
||||
}
|
||||
},
|
||||
&mut |place, op| {
|
||||
if let Some(conditions) = state.try_get_idx(place, self.map)
|
||||
&& let Ok(imm) = self.ecx.read_immediate_raw(op)
|
||||
&& let Some(imm) = imm.right()
|
||||
&& let Immediate::Scalar(Scalar::Int(int)) = *imm
|
||||
{
|
||||
conditions.iter_matches(int).for_each(|c: Condition| {
|
||||
self.opportunities
|
||||
.push(ThreadingOpportunity { chain: vec![bb], target: c.target })
|
||||
})
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
#[instrument(level = "trace", skip(self))]
|
||||
fn process_operand(
|
||||
&mut self,
|
||||
bb: BasicBlock,
|
||||
lhs: PlaceIndex,
|
||||
rhs: &Operand<'tcx>,
|
||||
state: &mut State<ConditionSet<'a>>,
|
||||
) -> Option<!> {
|
||||
match rhs {
|
||||
// If we expect `lhs ?= A`, we have an opportunity if we assume `constant == A`.
|
||||
Operand::Constant(constant) => {
|
||||
let conditions = state.try_get_idx(lhs, self.map)?;
|
||||
let constant =
|
||||
constant.const_.normalize(self.tcx, self.param_env).try_to_scalar_int()?;
|
||||
conditions.iter_matches(constant).for_each(register_opportunity);
|
||||
let constant = self.ecx.eval_mir_constant(&constant.const_, None, None).ok()?;
|
||||
self.process_constant(bb, lhs, constant, state);
|
||||
}
|
||||
// Transfer the conditions on the copied rhs.
|
||||
Operand::Move(rhs) | Operand::Copy(rhs) => {
|
||||
@ -359,6 +423,84 @@ impl<'tcx, 'a> TOFinder<'tcx, 'a> {
|
||||
None
|
||||
}
|
||||
|
||||
#[instrument(level = "trace", skip(self))]
|
||||
fn process_assign(
|
||||
&mut self,
|
||||
bb: BasicBlock,
|
||||
lhs_place: &Place<'tcx>,
|
||||
rhs: &Rvalue<'tcx>,
|
||||
state: &mut State<ConditionSet<'a>>,
|
||||
) -> Option<!> {
|
||||
let lhs = self.map.find(lhs_place.as_ref())?;
|
||||
match rhs {
|
||||
Rvalue::Use(operand) => self.process_operand(bb, lhs, operand, state)?,
|
||||
// Transfer the conditions on the copy rhs.
|
||||
Rvalue::CopyForDeref(rhs) => {
|
||||
self.process_operand(bb, lhs, &Operand::Copy(*rhs), state)?
|
||||
}
|
||||
Rvalue::Discriminant(rhs) => {
|
||||
let rhs = self.map.find_discr(rhs.as_ref())?;
|
||||
state.insert_place_idx(rhs, lhs, self.map);
|
||||
}
|
||||
// If we expect `lhs ?= A`, we have an opportunity if we assume `constant == A`.
|
||||
Rvalue::Aggregate(box ref kind, ref operands) => {
|
||||
let agg_ty = lhs_place.ty(self.body, self.tcx).ty;
|
||||
let lhs = match kind {
|
||||
// Do not support unions.
|
||||
AggregateKind::Adt(.., Some(_)) => return None,
|
||||
AggregateKind::Adt(_, variant_index, ..) if agg_ty.is_enum() => {
|
||||
if let Some(discr_target) = self.map.apply(lhs, TrackElem::Discriminant)
|
||||
&& let Ok(discr_value) =
|
||||
self.ecx.discriminant_for_variant(agg_ty, *variant_index)
|
||||
{
|
||||
self.process_immediate(bb, discr_target, discr_value, state);
|
||||
}
|
||||
self.map.apply(lhs, TrackElem::Variant(*variant_index))?
|
||||
}
|
||||
_ => lhs,
|
||||
};
|
||||
for (field_index, operand) in operands.iter_enumerated() {
|
||||
if let Some(field) = self.map.apply(lhs, TrackElem::Field(field_index)) {
|
||||
self.process_operand(bb, field, operand, state);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Transfer the conditions on the copy rhs, after inversing polarity.
|
||||
Rvalue::UnaryOp(UnOp::Not, Operand::Move(place) | Operand::Copy(place)) => {
|
||||
let conditions = state.try_get_idx(lhs, self.map)?;
|
||||
let place = self.map.find(place.as_ref())?;
|
||||
let conds = conditions.map(self.arena, Condition::inv);
|
||||
state.insert_value_idx(place, conds, self.map);
|
||||
}
|
||||
// We expect `lhs ?= A`. We found `lhs = Eq(rhs, B)`.
|
||||
// Create a condition on `rhs ?= B`.
|
||||
Rvalue::BinaryOp(
|
||||
op,
|
||||
box (Operand::Move(place) | Operand::Copy(place), Operand::Constant(value))
|
||||
| box (Operand::Constant(value), Operand::Move(place) | Operand::Copy(place)),
|
||||
) => {
|
||||
let conditions = state.try_get_idx(lhs, self.map)?;
|
||||
let place = self.map.find(place.as_ref())?;
|
||||
let equals = match op {
|
||||
BinOp::Eq => ScalarInt::TRUE,
|
||||
BinOp::Ne => ScalarInt::FALSE,
|
||||
_ => return None,
|
||||
};
|
||||
let value = value.const_.normalize(self.tcx, self.param_env).try_to_scalar_int()?;
|
||||
let conds = conditions.map(self.arena, |c| Condition {
|
||||
value,
|
||||
polarity: if c.matches(equals) { Polarity::Eq } else { Polarity::Ne },
|
||||
..c
|
||||
});
|
||||
state.insert_value_idx(place, conds, self.map);
|
||||
}
|
||||
|
||||
_ => {}
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
#[instrument(level = "trace", skip(self))]
|
||||
fn process_statement(
|
||||
&mut self,
|
||||
@ -374,18 +516,6 @@ impl<'tcx, 'a> TOFinder<'tcx, 'a> {
|
||||
// Below, `lhs` is the return value of `mutated_statement`,
|
||||
// the place to which `conditions` apply.
|
||||
|
||||
let discriminant_for_variant = |enum_ty: Ty<'tcx>, variant_index| {
|
||||
let discr = enum_ty.discriminant_for_variant(self.tcx, variant_index)?;
|
||||
let discr_layout = self.tcx.layout_of(self.param_env.and(discr.ty)).ok()?;
|
||||
let scalar = ScalarInt::try_from_uint(discr.val, discr_layout.size)?;
|
||||
Some(Operand::const_from_scalar(
|
||||
self.tcx,
|
||||
discr.ty,
|
||||
scalar.into(),
|
||||
rustc_span::DUMMY_SP,
|
||||
))
|
||||
};
|
||||
|
||||
match &stmt.kind {
|
||||
// If we expect `discriminant(place) ?= A`,
|
||||
// we have an opportunity if `variant_index ?= A`.
|
||||
@ -395,7 +525,7 @@ impl<'tcx, 'a> TOFinder<'tcx, 'a> {
|
||||
// `SetDiscriminant` may be a no-op if the assigned variant is the untagged variant
|
||||
// of a niche encoding. If we cannot ensure that we write to the discriminant, do
|
||||
// nothing.
|
||||
let enum_layout = self.tcx.layout_of(self.param_env.and(enum_ty)).ok()?;
|
||||
let enum_layout = self.ecx.layout_of(enum_ty).ok()?;
|
||||
let writes_discriminant = match enum_layout.variants {
|
||||
Variants::Single { index } => {
|
||||
assert_eq!(index, *variant_index);
|
||||
@ -408,8 +538,8 @@ impl<'tcx, 'a> TOFinder<'tcx, 'a> {
|
||||
} => *variant_index != untagged_variant,
|
||||
};
|
||||
if writes_discriminant {
|
||||
let discr = discriminant_for_variant(enum_ty, *variant_index)?;
|
||||
self.process_operand(bb, discr_target, &discr, state)?;
|
||||
let discr = self.ecx.discriminant_for_variant(enum_ty, *variant_index).ok()?;
|
||||
self.process_immediate(bb, discr_target, discr, state)?;
|
||||
}
|
||||
}
|
||||
// If we expect `lhs ?= true`, we have an opportunity if we assume `lhs == true`.
|
||||
@ -420,89 +550,7 @@ impl<'tcx, 'a> TOFinder<'tcx, 'a> {
|
||||
conditions.iter_matches(ScalarInt::TRUE).for_each(register_opportunity);
|
||||
}
|
||||
StatementKind::Assign(box (lhs_place, rhs)) => {
|
||||
if let Some(lhs) = self.map.find(lhs_place.as_ref()) {
|
||||
match rhs {
|
||||
Rvalue::Use(operand) => self.process_operand(bb, lhs, operand, state)?,
|
||||
// Transfer the conditions on the copy rhs.
|
||||
Rvalue::CopyForDeref(rhs) => {
|
||||
self.process_operand(bb, lhs, &Operand::Copy(*rhs), state)?
|
||||
}
|
||||
Rvalue::Discriminant(rhs) => {
|
||||
let rhs = self.map.find_discr(rhs.as_ref())?;
|
||||
state.insert_place_idx(rhs, lhs, self.map);
|
||||
}
|
||||
// If we expect `lhs ?= A`, we have an opportunity if we assume `constant == A`.
|
||||
Rvalue::Aggregate(box ref kind, ref operands) => {
|
||||
let agg_ty = lhs_place.ty(self.body, self.tcx).ty;
|
||||
let lhs = match kind {
|
||||
// Do not support unions.
|
||||
AggregateKind::Adt(.., Some(_)) => return None,
|
||||
AggregateKind::Adt(_, variant_index, ..) if agg_ty.is_enum() => {
|
||||
if let Some(discr_target) =
|
||||
self.map.apply(lhs, TrackElem::Discriminant)
|
||||
&& let Some(discr_value) =
|
||||
discriminant_for_variant(agg_ty, *variant_index)
|
||||
{
|
||||
self.process_operand(bb, discr_target, &discr_value, state);
|
||||
}
|
||||
self.map.apply(lhs, TrackElem::Variant(*variant_index))?
|
||||
}
|
||||
_ => lhs,
|
||||
};
|
||||
for (field_index, operand) in operands.iter_enumerated() {
|
||||
if let Some(field) =
|
||||
self.map.apply(lhs, TrackElem::Field(field_index))
|
||||
{
|
||||
self.process_operand(bb, field, operand, state);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Transfer the conditions on the copy rhs, after inversing polarity.
|
||||
Rvalue::UnaryOp(UnOp::Not, Operand::Move(place) | Operand::Copy(place)) => {
|
||||
let conditions = state.try_get_idx(lhs, self.map)?;
|
||||
let place = self.map.find(place.as_ref())?;
|
||||
let conds = conditions.map(self.arena, Condition::inv);
|
||||
state.insert_value_idx(place, conds, self.map);
|
||||
}
|
||||
// We expect `lhs ?= A`. We found `lhs = Eq(rhs, B)`.
|
||||
// Create a condition on `rhs ?= B`.
|
||||
Rvalue::BinaryOp(
|
||||
op,
|
||||
box (
|
||||
Operand::Move(place) | Operand::Copy(place),
|
||||
Operand::Constant(value),
|
||||
)
|
||||
| box (
|
||||
Operand::Constant(value),
|
||||
Operand::Move(place) | Operand::Copy(place),
|
||||
),
|
||||
) => {
|
||||
let conditions = state.try_get_idx(lhs, self.map)?;
|
||||
let place = self.map.find(place.as_ref())?;
|
||||
let equals = match op {
|
||||
BinOp::Eq => ScalarInt::TRUE,
|
||||
BinOp::Ne => ScalarInt::FALSE,
|
||||
_ => return None,
|
||||
};
|
||||
let value = value
|
||||
.const_
|
||||
.normalize(self.tcx, self.param_env)
|
||||
.try_to_scalar_int()?;
|
||||
let conds = conditions.map(self.arena, |c| Condition {
|
||||
value,
|
||||
polarity: if c.matches(equals) {
|
||||
Polarity::Eq
|
||||
} else {
|
||||
Polarity::Ne
|
||||
},
|
||||
..c
|
||||
});
|
||||
state.insert_value_idx(place, conds, self.map);
|
||||
}
|
||||
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
self.process_assign(bb, lhs_place, rhs, state)?;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
@ -577,7 +625,7 @@ impl<'tcx, 'a> TOFinder<'tcx, 'a> {
|
||||
|
||||
let discr = discr.place()?;
|
||||
let discr_ty = discr.ty(self.body, self.tcx).ty;
|
||||
let discr_layout = self.tcx.layout_of(self.param_env.and(discr_ty)).ok()?;
|
||||
let discr_layout = self.ecx.layout_of(discr_ty).ok()?;
|
||||
let conditions = state.try_get(discr.as_ref(), self.map)?;
|
||||
|
||||
if let Some((value, _)) = targets.iter().find(|&(_, target)| target == target_bb) {
|
||||
|
@ -182,7 +182,7 @@ where
|
||||
}
|
||||
|
||||
// Ensure CGUs are sorted by name, so that we get deterministic results.
|
||||
if !codegen_units.is_sorted_by(|a, b| Some(a.name().as_str().cmp(b.name().as_str()))) {
|
||||
if !codegen_units.is_sorted_by(|a, b| a.name().as_str() <= b.name().as_str()) {
|
||||
let mut names = String::new();
|
||||
for cgu in codegen_units.iter() {
|
||||
names += &format!("- {}\n", cgu.name());
|
||||
@ -317,7 +317,7 @@ fn merge_codegen_units<'tcx>(
|
||||
assert!(cx.tcx.sess.codegen_units().as_usize() >= 1);
|
||||
|
||||
// A sorted order here ensures merging is deterministic.
|
||||
assert!(codegen_units.is_sorted_by(|a, b| Some(a.name().as_str().cmp(b.name().as_str()))));
|
||||
assert!(codegen_units.is_sorted_by(|a, b| a.name().as_str() <= b.name().as_str()));
|
||||
|
||||
// This map keeps track of what got merged into what.
|
||||
let mut cgu_contents: FxHashMap<Symbol, Vec<Symbol>> =
|
||||
|
@ -82,7 +82,7 @@ impl<'a, T: ?Sized> Captures<'a> for T {}
|
||||
/// Most of the crate is parameterized on a type that implements this trait.
|
||||
pub trait TypeCx: Sized + fmt::Debug {
|
||||
/// The type of a pattern.
|
||||
type Ty: Copy + Clone + fmt::Debug; // FIXME: remove Copy
|
||||
type Ty: Clone + fmt::Debug;
|
||||
/// Errors that can abort analysis.
|
||||
type Error: fmt::Debug;
|
||||
/// The index of an enum variant.
|
||||
@ -97,16 +97,16 @@ pub trait TypeCx: Sized + fmt::Debug {
|
||||
fn is_exhaustive_patterns_feature_on(&self) -> bool;
|
||||
|
||||
/// The number of fields for this constructor.
|
||||
fn ctor_arity(&self, ctor: &Constructor<Self>, ty: Self::Ty) -> usize;
|
||||
fn ctor_arity(&self, ctor: &Constructor<Self>, ty: &Self::Ty) -> usize;
|
||||
|
||||
/// The types of the fields for this constructor. The result must have a length of
|
||||
/// `ctor_arity()`.
|
||||
fn ctor_sub_tys(&self, ctor: &Constructor<Self>, ty: Self::Ty) -> &[Self::Ty];
|
||||
fn ctor_sub_tys(&self, ctor: &Constructor<Self>, ty: &Self::Ty) -> &[Self::Ty];
|
||||
|
||||
/// The set of all the constructors for `ty`.
|
||||
///
|
||||
/// This must follow the invariants of `ConstructorSet`
|
||||
fn ctors_for_ty(&self, ty: Self::Ty) -> Result<ConstructorSet<Self>, Self::Error>;
|
||||
fn ctors_for_ty(&self, ty: &Self::Ty) -> Result<ConstructorSet<Self>, Self::Error>;
|
||||
|
||||
/// Best-effort `Debug` implementation.
|
||||
fn debug_pat(f: &mut fmt::Formatter<'_>, pat: &DeconstructedPat<'_, Self>) -> fmt::Result;
|
||||
|
@ -46,7 +46,7 @@ impl<'p, 'tcx> PatternColumn<'p, 'tcx> {
|
||||
}
|
||||
|
||||
fn head_ty(&self) -> Option<RevealedTy<'tcx>> {
|
||||
self.patterns.first().map(|pat| pat.ty())
|
||||
self.patterns.first().map(|pat| *pat.ty())
|
||||
}
|
||||
|
||||
/// Do constructor splitting on the constructors of the column.
|
||||
@ -101,7 +101,7 @@ fn collect_nonexhaustive_missing_variants<'a, 'p, 'tcx>(
|
||||
let Some(ty) = column.head_ty() else {
|
||||
return Ok(Vec::new());
|
||||
};
|
||||
let pcx = &PlaceCtxt::new_dummy(cx, ty);
|
||||
let pcx = &PlaceCtxt::new_dummy(cx, &ty);
|
||||
|
||||
let set = column.analyze_ctors(pcx)?;
|
||||
if set.present.is_empty() {
|
||||
|
@ -54,8 +54,8 @@ impl<'p, Cx: TypeCx> DeconstructedPat<'p, Cx> {
|
||||
pub fn ctor(&self) -> &Constructor<Cx> {
|
||||
&self.ctor
|
||||
}
|
||||
pub fn ty(&self) -> Cx::Ty {
|
||||
self.ty
|
||||
pub fn ty(&self) -> &Cx::Ty {
|
||||
&self.ty
|
||||
}
|
||||
/// Returns the extra data stored in a pattern. Returns `None` if the pattern is a wildcard that
|
||||
/// does not correspond to a user-supplied pattern.
|
||||
@ -242,15 +242,15 @@ impl<Cx: TypeCx> WitnessPat<Cx> {
|
||||
/// `Some(_)`.
|
||||
pub(crate) fn wild_from_ctor(pcx: &PlaceCtxt<'_, Cx>, ctor: Constructor<Cx>) -> Self {
|
||||
let field_tys = pcx.ctor_sub_tys(&ctor);
|
||||
let fields = field_tys.iter().map(|ty| Self::wildcard(*ty)).collect();
|
||||
Self::new(ctor, fields, pcx.ty)
|
||||
let fields = field_tys.iter().cloned().map(|ty| Self::wildcard(ty)).collect();
|
||||
Self::new(ctor, fields, pcx.ty.clone())
|
||||
}
|
||||
|
||||
pub fn ctor(&self) -> &Constructor<Cx> {
|
||||
&self.ctor
|
||||
}
|
||||
pub fn ty(&self) -> Cx::Ty {
|
||||
self.ty
|
||||
pub fn ty(&self) -> &Cx::Ty {
|
||||
&self.ty
|
||||
}
|
||||
|
||||
pub fn iter_fields(&self) -> impl Iterator<Item = &WitnessPat<Cx>> {
|
||||
|
@ -766,7 +766,7 @@ impl<'p, 'tcx> RustcMatchCheckCtxt<'p, 'tcx> {
|
||||
let mut subpatterns = pat.iter_fields().map(|p| Box::new(cx.hoist_witness_pat(p)));
|
||||
let kind = match pat.ctor() {
|
||||
Bool(b) => PatKind::Constant { value: mir::Const::from_bool(cx.tcx, *b) },
|
||||
IntRange(range) => return self.hoist_pat_range(range, pat.ty()),
|
||||
IntRange(range) => return self.hoist_pat_range(range, *pat.ty()),
|
||||
Struct | Variant(_) | UnionField => match pat.ty().kind() {
|
||||
ty::Tuple(..) => PatKind::Leaf {
|
||||
subpatterns: subpatterns
|
||||
@ -785,7 +785,7 @@ impl<'p, 'tcx> RustcMatchCheckCtxt<'p, 'tcx> {
|
||||
RustcMatchCheckCtxt::variant_index_for_adt(&pat.ctor(), *adt_def);
|
||||
let variant = &adt_def.variant(variant_index);
|
||||
let subpatterns = cx
|
||||
.list_variant_nonhidden_fields(pat.ty(), variant)
|
||||
.list_variant_nonhidden_fields(*pat.ty(), variant)
|
||||
.zip(subpatterns)
|
||||
.map(|((field, _ty), pattern)| FieldPat { field, pattern })
|
||||
.collect();
|
||||
@ -796,7 +796,7 @@ impl<'p, 'tcx> RustcMatchCheckCtxt<'p, 'tcx> {
|
||||
PatKind::Leaf { subpatterns }
|
||||
}
|
||||
}
|
||||
_ => bug!("unexpected ctor for type {:?} {:?}", pat.ctor(), pat.ty()),
|
||||
_ => bug!("unexpected ctor for type {:?} {:?}", pat.ctor(), *pat.ty()),
|
||||
},
|
||||
// Note: given the expansion of `&str` patterns done in `expand_pattern`, we should
|
||||
// be careful to reconstruct the correct constant pattern here. However a string
|
||||
@ -961,21 +961,21 @@ impl<'p, 'tcx> TypeCx for RustcMatchCheckCtxt<'p, 'tcx> {
|
||||
self.tcx.features().exhaustive_patterns
|
||||
}
|
||||
|
||||
fn ctor_arity(&self, ctor: &crate::constructor::Constructor<Self>, ty: Self::Ty) -> usize {
|
||||
self.ctor_arity(ctor, ty)
|
||||
fn ctor_arity(&self, ctor: &crate::constructor::Constructor<Self>, ty: &Self::Ty) -> usize {
|
||||
self.ctor_arity(ctor, *ty)
|
||||
}
|
||||
fn ctor_sub_tys(
|
||||
&self,
|
||||
ctor: &crate::constructor::Constructor<Self>,
|
||||
ty: Self::Ty,
|
||||
ty: &Self::Ty,
|
||||
) -> &[Self::Ty] {
|
||||
self.ctor_sub_tys(ctor, ty)
|
||||
self.ctor_sub_tys(ctor, *ty)
|
||||
}
|
||||
fn ctors_for_ty(
|
||||
&self,
|
||||
ty: Self::Ty,
|
||||
ty: &Self::Ty,
|
||||
) -> Result<crate::constructor::ConstructorSet<Self>, Self::Error> {
|
||||
self.ctors_for_ty(ty)
|
||||
self.ctors_for_ty(*ty)
|
||||
}
|
||||
|
||||
fn debug_pat(
|
||||
@ -994,7 +994,7 @@ impl<'p, 'tcx> TypeCx for RustcMatchCheckCtxt<'p, 'tcx> {
|
||||
overlaps_on: IntRange,
|
||||
overlaps_with: &[&crate::pat::DeconstructedPat<'_, Self>],
|
||||
) {
|
||||
let overlap_as_pat = self.hoist_pat_range(&overlaps_on, pat.ty());
|
||||
let overlap_as_pat = self.hoist_pat_range(&overlaps_on, *pat.ty());
|
||||
let overlaps: Vec<_> = overlaps_with
|
||||
.iter()
|
||||
.map(|pat| pat.data().unwrap().span)
|
||||
|
@ -736,13 +736,14 @@ pub(crate) struct PlaceCtxt<'a, Cx: TypeCx> {
|
||||
#[derivative(Debug = "ignore")]
|
||||
pub(crate) mcx: MatchCtxt<'a, Cx>,
|
||||
/// Type of the place under investigation.
|
||||
pub(crate) ty: Cx::Ty,
|
||||
#[derivative(Clone(clone_with = "Clone::clone"))] // See rust-derivative#90
|
||||
pub(crate) ty: &'a Cx::Ty,
|
||||
}
|
||||
|
||||
impl<'a, Cx: TypeCx> PlaceCtxt<'a, Cx> {
|
||||
/// A `PlaceCtxt` when code other than `is_useful` needs one.
|
||||
#[cfg_attr(not(feature = "rustc"), allow(dead_code))]
|
||||
pub(crate) fn new_dummy(mcx: MatchCtxt<'a, Cx>, ty: Cx::Ty) -> Self {
|
||||
pub(crate) fn new_dummy(mcx: MatchCtxt<'a, Cx>, ty: &'a Cx::Ty) -> Self {
|
||||
PlaceCtxt { mcx, ty }
|
||||
}
|
||||
|
||||
@ -1023,8 +1024,8 @@ impl<'p, Cx: TypeCx> Matrix<'p, Cx> {
|
||||
matrix
|
||||
}
|
||||
|
||||
fn head_ty(&self) -> Option<Cx::Ty> {
|
||||
self.place_ty.first().copied()
|
||||
fn head_ty(&self) -> Option<&Cx::Ty> {
|
||||
self.place_ty.first()
|
||||
}
|
||||
fn column_count(&self) -> usize {
|
||||
self.place_ty.len()
|
||||
@ -1058,7 +1059,7 @@ impl<'p, Cx: TypeCx> Matrix<'p, Cx> {
|
||||
let ctor_sub_tys = pcx.ctor_sub_tys(ctor);
|
||||
let arity = ctor_sub_tys.len();
|
||||
let specialized_place_ty =
|
||||
ctor_sub_tys.iter().chain(self.place_ty[1..].iter()).copied().collect();
|
||||
ctor_sub_tys.iter().chain(self.place_ty[1..].iter()).cloned().collect();
|
||||
let ctor_sub_validity = self.place_validity[0].specialize(ctor);
|
||||
let specialized_place_validity = std::iter::repeat(ctor_sub_validity)
|
||||
.take(arity)
|
||||
@ -1214,7 +1215,7 @@ impl<Cx: TypeCx> WitnessStack<Cx> {
|
||||
let len = self.0.len();
|
||||
let arity = ctor.arity(pcx);
|
||||
let fields = self.0.drain((len - arity)..).rev().collect();
|
||||
let pat = WitnessPat::new(ctor.clone(), fields, pcx.ty);
|
||||
let pat = WitnessPat::new(ctor.clone(), fields, pcx.ty.clone());
|
||||
self.0.push(pat);
|
||||
}
|
||||
}
|
||||
@ -1410,7 +1411,7 @@ fn compute_exhaustiveness_and_usefulness<'a, 'p, Cx: TypeCx>(
|
||||
return Ok(WitnessMatrix::empty());
|
||||
}
|
||||
|
||||
let Some(ty) = matrix.head_ty() else {
|
||||
let Some(ty) = matrix.head_ty().cloned() else {
|
||||
// The base case: there are no columns in the matrix. We are morally pattern-matching on ().
|
||||
// A row is useful iff it has no (unguarded) rows above it.
|
||||
let mut useful = true; // Whether the next row is useful.
|
||||
@ -1431,7 +1432,7 @@ fn compute_exhaustiveness_and_usefulness<'a, 'p, Cx: TypeCx>(
|
||||
};
|
||||
|
||||
debug!("ty: {ty:?}");
|
||||
let pcx = &PlaceCtxt { mcx, ty };
|
||||
let pcx = &PlaceCtxt { mcx, ty: &ty };
|
||||
let ctors_for_ty = pcx.ctors_for_ty()?;
|
||||
|
||||
// Whether the place/column we are inspecting is known to contain valid data.
|
||||
|
@ -4033,42 +4033,42 @@ pub trait Iterator {
|
||||
Self: Sized,
|
||||
Self::Item: PartialOrd,
|
||||
{
|
||||
self.is_sorted_by(PartialOrd::partial_cmp)
|
||||
self.is_sorted_by(|a, b| a <= b)
|
||||
}
|
||||
|
||||
/// Checks if the elements of this iterator are sorted using the given comparator function.
|
||||
///
|
||||
/// Instead of using `PartialOrd::partial_cmp`, this function uses the given `compare`
|
||||
/// function to determine the ordering of two elements. Apart from that, it's equivalent to
|
||||
/// [`is_sorted`]; see its documentation for more information.
|
||||
/// function to determine whether two elements are to be considered in sorted order.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(is_sorted)]
|
||||
///
|
||||
/// assert!([1, 2, 2, 9].iter().is_sorted_by(|a, b| a.partial_cmp(b)));
|
||||
/// assert!(![1, 3, 2, 4].iter().is_sorted_by(|a, b| a.partial_cmp(b)));
|
||||
/// assert!([0].iter().is_sorted_by(|a, b| a.partial_cmp(b)));
|
||||
/// assert!(std::iter::empty::<i32>().is_sorted_by(|a, b| a.partial_cmp(b)));
|
||||
/// assert!(![0.0, 1.0, f32::NAN].iter().is_sorted_by(|a, b| a.partial_cmp(b)));
|
||||
/// ```
|
||||
/// assert!([1, 2, 2, 9].iter().is_sorted_by(|a, b| a <= b));
|
||||
/// assert!(![1, 2, 2, 9].iter().is_sorted_by(|a, b| a < b));
|
||||
///
|
||||
/// [`is_sorted`]: Iterator::is_sorted
|
||||
/// assert!([0].iter().is_sorted_by(|a, b| true));
|
||||
/// assert!([0].iter().is_sorted_by(|a, b| false));
|
||||
///
|
||||
/// assert!(std::iter::empty::<i32>().is_sorted_by(|a, b| false));
|
||||
/// assert!(std::iter::empty::<i32>().is_sorted_by(|a, b| true));
|
||||
/// ```
|
||||
#[unstable(feature = "is_sorted", reason = "new API", issue = "53485")]
|
||||
#[rustc_do_not_const_check]
|
||||
fn is_sorted_by<F>(mut self, compare: F) -> bool
|
||||
where
|
||||
Self: Sized,
|
||||
F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,
|
||||
F: FnMut(&Self::Item, &Self::Item) -> bool,
|
||||
{
|
||||
#[inline]
|
||||
fn check<'a, T>(
|
||||
last: &'a mut T,
|
||||
mut compare: impl FnMut(&T, &T) -> Option<Ordering> + 'a,
|
||||
mut compare: impl FnMut(&T, &T) -> bool + 'a,
|
||||
) -> impl FnMut(T) -> bool + 'a {
|
||||
move |curr| {
|
||||
if let Some(Ordering::Greater) | None = compare(&last, &curr) {
|
||||
if !compare(&last, &curr) {
|
||||
return false;
|
||||
}
|
||||
*last = curr;
|
||||
|
@ -161,6 +161,7 @@
|
||||
#![feature(const_slice_ptr_len)]
|
||||
#![feature(const_slice_split_at_mut)]
|
||||
#![feature(const_str_from_utf8_unchecked_mut)]
|
||||
#![feature(const_strict_overflow_ops)]
|
||||
#![feature(const_swap)]
|
||||
#![feature(const_try)]
|
||||
#![feature(const_type_id)]
|
||||
|
@ -1785,6 +1785,31 @@ impl Ipv6Addr {
|
||||
(self.segments()[0] & 0xff00) == 0xff00
|
||||
}
|
||||
|
||||
/// Returns [`true`] if the address is an IPv4-mapped address (`::ffff:0:0/96`).
|
||||
///
|
||||
/// IPv4-mapped addresses can be converted to their canonical IPv4 address with
|
||||
/// [`to_ipv4_mapped`](Ipv6Addr::to_ipv4_mapped).
|
||||
///
|
||||
/// # Examples
|
||||
/// ```
|
||||
/// #![feature(ip)]
|
||||
///
|
||||
/// use std::net::{Ipv4Addr, Ipv6Addr};
|
||||
///
|
||||
/// let ipv4_mapped = Ipv4Addr::new(192, 0, 2, 255).to_ipv6_mapped();
|
||||
/// assert_eq!(ipv4_mapped.is_ipv4_mapped(), true);
|
||||
/// assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc000, 0x2ff).is_ipv4_mapped(), true);
|
||||
///
|
||||
/// assert_eq!(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0).is_ipv4_mapped(), false);
|
||||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ipv6", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn is_ipv4_mapped(&self) -> bool {
|
||||
matches!(self.segments(), [0, 0, 0, 0, 0, 0xffff, _, _])
|
||||
}
|
||||
|
||||
/// Converts this address to an [`IPv4` address] if it's an [IPv4-mapped] address,
|
||||
/// as defined in [IETF RFC 4291 section 2.5.5.2], otherwise returns [`None`].
|
||||
///
|
||||
|
@ -451,7 +451,40 @@ macro_rules! int_impl {
|
||||
#[inline]
|
||||
pub const fn checked_add(self, rhs: Self) -> Option<Self> {
|
||||
let (a, b) = self.overflowing_add(rhs);
|
||||
if unlikely!(b) {None} else {Some(a)}
|
||||
if unlikely!(b) { None } else { Some(a) }
|
||||
}
|
||||
|
||||
/// Strict integer addition. Computes `self + rhs`, panicking
|
||||
/// if overflow occurred.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// ## Overflow behavior
|
||||
///
|
||||
/// This function will always panic on overflow, regardless of whether overflow checks are enabled.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!((", stringify!($SelfT), "::MAX - 2).strict_add(1), ", stringify!($SelfT), "::MAX - 1);")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = (", stringify!($SelfT), "::MAX - 2).strict_add(3);")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub const fn strict_add(self, rhs: Self) -> Self {
|
||||
let (a, b) = self.overflowing_add(rhs);
|
||||
if unlikely!(b) { overflow_panic::add() } else { a }
|
||||
}
|
||||
|
||||
/// Unchecked integer addition. Computes `self + rhs`, assuming overflow
|
||||
@ -498,7 +531,40 @@ macro_rules! int_impl {
|
||||
#[inline]
|
||||
pub const fn checked_add_unsigned(self, rhs: $UnsignedT) -> Option<Self> {
|
||||
let (a, b) = self.overflowing_add_unsigned(rhs);
|
||||
if unlikely!(b) {None} else {Some(a)}
|
||||
if unlikely!(b) { None } else { Some(a) }
|
||||
}
|
||||
|
||||
/// Strict addition with an unsigned integer. Computes `self + rhs`,
|
||||
/// panicking if overflow occurred.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// ## Overflow behavior
|
||||
///
|
||||
/// This function will always panic on overflow, regardless of whether overflow checks are enabled.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!(1", stringify!($SelfT), ".strict_add_unsigned(2), 3);")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = (", stringify!($SelfT), "::MAX - 2).strict_add_unsigned(3);")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub const fn strict_add_unsigned(self, rhs: $UnsignedT) -> Self {
|
||||
let (a, b) = self.overflowing_add_unsigned(rhs);
|
||||
if unlikely!(b) { overflow_panic::add() } else { a }
|
||||
}
|
||||
|
||||
/// Checked integer subtraction. Computes `self - rhs`, returning `None` if
|
||||
@ -519,7 +585,40 @@ macro_rules! int_impl {
|
||||
#[inline]
|
||||
pub const fn checked_sub(self, rhs: Self) -> Option<Self> {
|
||||
let (a, b) = self.overflowing_sub(rhs);
|
||||
if unlikely!(b) {None} else {Some(a)}
|
||||
if unlikely!(b) { None } else { Some(a) }
|
||||
}
|
||||
|
||||
/// Strict integer subtraction. Computes `self - rhs`, panicking if
|
||||
/// overflow occurred.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// ## Overflow behavior
|
||||
///
|
||||
/// This function will always panic on overflow, regardless of whether overflow checks are enabled.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!((", stringify!($SelfT), "::MIN + 2).strict_sub(1), ", stringify!($SelfT), "::MIN + 1);")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = (", stringify!($SelfT), "::MIN + 2).strict_sub(3);")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub const fn strict_sub(self, rhs: Self) -> Self {
|
||||
let (a, b) = self.overflowing_sub(rhs);
|
||||
if unlikely!(b) { overflow_panic::sub() } else { a }
|
||||
}
|
||||
|
||||
/// Unchecked integer subtraction. Computes `self - rhs`, assuming overflow
|
||||
@ -566,7 +665,40 @@ macro_rules! int_impl {
|
||||
#[inline]
|
||||
pub const fn checked_sub_unsigned(self, rhs: $UnsignedT) -> Option<Self> {
|
||||
let (a, b) = self.overflowing_sub_unsigned(rhs);
|
||||
if unlikely!(b) {None} else {Some(a)}
|
||||
if unlikely!(b) { None } else { Some(a) }
|
||||
}
|
||||
|
||||
/// Strict subtraction with an unsigned integer. Computes `self - rhs`,
|
||||
/// panicking if overflow occurred.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// ## Overflow behavior
|
||||
///
|
||||
/// This function will always panic on overflow, regardless of whether overflow checks are enabled.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!(1", stringify!($SelfT), ".strict_sub_unsigned(2), -1);")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = (", stringify!($SelfT), "::MIN + 2).strict_sub_unsigned(3);")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub const fn strict_sub_unsigned(self, rhs: $UnsignedT) -> Self {
|
||||
let (a, b) = self.overflowing_sub_unsigned(rhs);
|
||||
if unlikely!(b) { overflow_panic::sub() } else { a }
|
||||
}
|
||||
|
||||
/// Checked integer multiplication. Computes `self * rhs`, returning `None` if
|
||||
@ -587,7 +719,40 @@ macro_rules! int_impl {
|
||||
#[inline]
|
||||
pub const fn checked_mul(self, rhs: Self) -> Option<Self> {
|
||||
let (a, b) = self.overflowing_mul(rhs);
|
||||
if unlikely!(b) {None} else {Some(a)}
|
||||
if unlikely!(b) { None } else { Some(a) }
|
||||
}
|
||||
|
||||
/// Strict integer multiplication. Computes `self * rhs`, panicking if
|
||||
/// overflow occurred.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// ## Overflow behavior
|
||||
///
|
||||
/// This function will always panic on overflow, regardless of whether overflow checks are enabled.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!(", stringify!($SelfT), "::MAX.strict_mul(1), ", stringify!($SelfT), "::MAX);")]
|
||||
/// ```
|
||||
///
|
||||
/// ``` should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = ", stringify!($SelfT), "::MAX.strict_mul(2);")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub const fn strict_mul(self, rhs: Self) -> Self {
|
||||
let (a, b) = self.overflowing_mul(rhs);
|
||||
if unlikely!(b) { overflow_panic::mul() } else { a }
|
||||
}
|
||||
|
||||
/// Unchecked integer multiplication. Computes `self * rhs`, assuming overflow
|
||||
@ -642,6 +807,50 @@ macro_rules! int_impl {
|
||||
}
|
||||
}
|
||||
|
||||
/// Strict integer division. Computes `self / rhs`, panicking
|
||||
/// if overflow occurred.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function will panic if `rhs` is zero.
|
||||
///
|
||||
/// ## Overflow behavior
|
||||
///
|
||||
/// This function will always panic on overflow, regardless of whether overflow checks are enabled.
|
||||
///
|
||||
/// The only case where such an overflow can occur is when one divides `MIN / -1` on a signed type (where
|
||||
/// `MIN` is the negative minimal value for the type); this is equivalent to `-MIN`, a positive value
|
||||
/// that is too large to represent in the type.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!((", stringify!($SelfT), "::MIN + 1).strict_div(-1), ", stringify!($Max), ");")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = ", stringify!($SelfT), "::MIN.strict_div(-1);")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = (1", stringify!($SelfT), ").strict_div(0);")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub const fn strict_div(self, rhs: Self) -> Self {
|
||||
let (a, b) = self.overflowing_div(rhs);
|
||||
if unlikely!(b) { overflow_panic::div() } else { a }
|
||||
}
|
||||
|
||||
/// Checked Euclidean division. Computes `self.div_euclid(rhs)`,
|
||||
/// returning `None` if `rhs == 0` or the division results in overflow.
|
||||
///
|
||||
@ -668,6 +877,50 @@ macro_rules! int_impl {
|
||||
}
|
||||
}
|
||||
|
||||
/// Strict Euclidean division. Computes `self.div_euclid(rhs)`, panicking
|
||||
/// if overflow occurred.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function will panic if `rhs` is zero.
|
||||
///
|
||||
/// ## Overflow behavior
|
||||
///
|
||||
/// This function will always panic on overflow, regardless of whether overflow checks are enabled.
|
||||
///
|
||||
/// The only case where such an overflow can occur is when one divides `MIN / -1` on a signed type (where
|
||||
/// `MIN` is the negative minimal value for the type); this is equivalent to `-MIN`, a positive value
|
||||
/// that is too large to represent in the type.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!((", stringify!($SelfT), "::MIN + 1).strict_div_euclid(-1), ", stringify!($Max), ");")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = ", stringify!($SelfT), "::MIN.strict_div_euclid(-1);")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = (1", stringify!($SelfT), ").strict_div_euclid(0);")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub const fn strict_div_euclid(self, rhs: Self) -> Self {
|
||||
let (a, b) = self.overflowing_div_euclid(rhs);
|
||||
if unlikely!(b) { overflow_panic::div() } else { a }
|
||||
}
|
||||
|
||||
/// Checked integer remainder. Computes `self % rhs`, returning `None` if
|
||||
/// `rhs == 0` or the division results in overflow.
|
||||
///
|
||||
@ -694,6 +947,49 @@ macro_rules! int_impl {
|
||||
}
|
||||
}
|
||||
|
||||
/// Strict integer remainder. Computes `self % rhs`, panicking if
|
||||
/// the division results in overflow.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function will panic if `rhs` is zero.
|
||||
///
|
||||
/// ## Overflow behavior
|
||||
///
|
||||
/// This function will always panic on overflow, regardless of whether overflow checks are enabled.
|
||||
///
|
||||
/// The only case where such an overflow can occur is `x % y` for `MIN / -1` on a
|
||||
/// signed type (where `MIN` is the negative minimal value), which is invalid due to implementation artifacts.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!(5", stringify!($SelfT), ".strict_rem(2), 1);")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = 5", stringify!($SelfT), ".strict_rem(0);")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = ", stringify!($SelfT), "::MIN.strict_rem(-1);")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub const fn strict_rem(self, rhs: Self) -> Self {
|
||||
let (a, b) = self.overflowing_rem(rhs);
|
||||
if unlikely!(b) { overflow_panic::rem() } else { a }
|
||||
}
|
||||
|
||||
/// Checked Euclidean remainder. Computes `self.rem_euclid(rhs)`, returning `None`
|
||||
/// if `rhs == 0` or the division results in overflow.
|
||||
///
|
||||
@ -720,6 +1016,49 @@ macro_rules! int_impl {
|
||||
}
|
||||
}
|
||||
|
||||
/// Strict Euclidean remainder. Computes `self.rem_euclid(rhs)`, panicking if
|
||||
/// the division results in overflow.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function will panic if `rhs` is zero.
|
||||
///
|
||||
/// ## Overflow behavior
|
||||
///
|
||||
/// This function will always panic on overflow, regardless of whether overflow checks are enabled.
|
||||
///
|
||||
/// The only case where such an overflow can occur is `x % y` for `MIN / -1` on a
|
||||
/// signed type (where `MIN` is the negative minimal value), which is invalid due to implementation artifacts.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!(5", stringify!($SelfT), ".strict_rem_euclid(2), 1);")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = 5", stringify!($SelfT), ".strict_rem_euclid(0);")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = ", stringify!($SelfT), "::MIN.strict_rem_euclid(-1);")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub const fn strict_rem_euclid(self, rhs: Self) -> Self {
|
||||
let (a, b) = self.overflowing_rem_euclid(rhs);
|
||||
if unlikely!(b) { overflow_panic::rem() } else { a }
|
||||
}
|
||||
|
||||
/// Checked negation. Computes `-self`, returning `None` if `self == MIN`.
|
||||
///
|
||||
/// # Examples
|
||||
@ -737,7 +1076,7 @@ macro_rules! int_impl {
|
||||
#[inline]
|
||||
pub const fn checked_neg(self) -> Option<Self> {
|
||||
let (a, b) = self.overflowing_neg();
|
||||
if unlikely!(b) {None} else {Some(a)}
|
||||
if unlikely!(b) { None } else { Some(a) }
|
||||
}
|
||||
|
||||
/// Unchecked negation. Computes `-self`, assuming overflow cannot occur.
|
||||
@ -765,6 +1104,38 @@ macro_rules! int_impl {
|
||||
unsafe { intrinsics::unchecked_sub(0, self) }
|
||||
}
|
||||
|
||||
/// Strict negation. Computes `-self`, panicking if `self == MIN`.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// ## Overflow behavior
|
||||
///
|
||||
/// This function will always panic on overflow, regardless of whether overflow checks are enabled.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!(5", stringify!($SelfT), ".strict_neg(), -5);")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = ", stringify!($SelfT), "::MIN.strict_neg();")]
|
||||
///
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub const fn strict_neg(self) -> Self {
|
||||
let (a, b) = self.overflowing_neg();
|
||||
if unlikely!(b) { overflow_panic::neg() } else { a }
|
||||
}
|
||||
|
||||
/// Checked shift left. Computes `self << rhs`, returning `None` if `rhs` is larger
|
||||
/// than or equal to the number of bits in `self`.
|
||||
///
|
||||
@ -783,7 +1154,40 @@ macro_rules! int_impl {
|
||||
#[inline]
|
||||
pub const fn checked_shl(self, rhs: u32) -> Option<Self> {
|
||||
let (a, b) = self.overflowing_shl(rhs);
|
||||
if unlikely!(b) {None} else {Some(a)}
|
||||
if unlikely!(b) { None } else { Some(a) }
|
||||
}
|
||||
|
||||
/// Strict shift left. Computes `self << rhs`, panicking if `rhs` is larger
|
||||
/// than or equal to the number of bits in `self`.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// ## Overflow behavior
|
||||
///
|
||||
/// This function will always panic on overflow, regardless of whether overflow checks are enabled.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!(0x1", stringify!($SelfT), ".strict_shl(4), 0x10);")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = 0x1", stringify!($SelfT), ".strict_shl(129);")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub const fn strict_shl(self, rhs: u32) -> Self {
|
||||
let (a, b) = self.overflowing_shl(rhs);
|
||||
if unlikely!(b) { overflow_panic::shl() } else { a }
|
||||
}
|
||||
|
||||
/// Unchecked shift left. Computes `self << rhs`, assuming that
|
||||
@ -831,7 +1235,40 @@ macro_rules! int_impl {
|
||||
#[inline]
|
||||
pub const fn checked_shr(self, rhs: u32) -> Option<Self> {
|
||||
let (a, b) = self.overflowing_shr(rhs);
|
||||
if unlikely!(b) {None} else {Some(a)}
|
||||
if unlikely!(b) { None } else { Some(a) }
|
||||
}
|
||||
|
||||
/// Strict shift right. Computes `self >> rhs`, panicking `rhs` is
|
||||
/// larger than or equal to the number of bits in `self`.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// ## Overflow behavior
|
||||
///
|
||||
/// This function will always panic on overflow, regardless of whether overflow checks are enabled.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!(0x10", stringify!($SelfT), ".strict_shr(4), 0x1);")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = 0x10", stringify!($SelfT), ".strict_shr(128);")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub const fn strict_shr(self, rhs: u32) -> Self {
|
||||
let (a, b) = self.overflowing_shr(rhs);
|
||||
if unlikely!(b) { overflow_panic::shr() } else { a }
|
||||
}
|
||||
|
||||
/// Unchecked shift right. Computes `self >> rhs`, assuming that
|
||||
@ -885,6 +1322,42 @@ macro_rules! int_impl {
|
||||
}
|
||||
}
|
||||
|
||||
/// Strict absolute value. Computes `self.abs()`, panicking if
|
||||
/// `self == MIN`.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// ## Overflow behavior
|
||||
///
|
||||
/// This function will always panic on overflow, regardless of whether overflow checks are enabled.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!((-5", stringify!($SelfT), ").strict_abs(), 5);")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = ", stringify!($SelfT), "::MIN.strict_abs();")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub const fn strict_abs(self) -> Self {
|
||||
if self.is_negative() {
|
||||
self.strict_neg()
|
||||
} else {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
/// Checked exponentiation. Computes `self.pow(exp)`, returning `None` if
|
||||
/// overflow occurred.
|
||||
///
|
||||
@ -923,6 +1396,55 @@ macro_rules! int_impl {
|
||||
acc.checked_mul(base)
|
||||
}
|
||||
|
||||
/// Strict exponentiation. Computes `self.pow(exp)`, panicking if
|
||||
/// overflow occurred.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// ## Overflow behavior
|
||||
///
|
||||
/// This function will always panic on overflow, regardless of whether overflow checks are enabled.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!(8", stringify!($SelfT), ".strict_pow(2), 64);")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = ", stringify!($SelfT), "::MAX.strict_pow(2);")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub const fn strict_pow(self, mut exp: u32) -> Self {
|
||||
if exp == 0 {
|
||||
return 1;
|
||||
}
|
||||
let mut base = self;
|
||||
let mut acc: Self = 1;
|
||||
|
||||
while exp > 1 {
|
||||
if (exp & 1) == 1 {
|
||||
acc = acc.strict_mul(base);
|
||||
}
|
||||
exp /= 2;
|
||||
base = base.strict_mul(base);
|
||||
}
|
||||
// since exp!=0, finally the exp must be 1.
|
||||
// Deal with the final bit of the exponent separately, since
|
||||
// squaring the base afterwards is not necessary and may cause a
|
||||
// needless overflow.
|
||||
acc.strict_mul(base)
|
||||
}
|
||||
|
||||
/// Returns the square root of the number, rounded down.
|
||||
///
|
||||
/// Returns `None` if `self` is negative.
|
||||
|
@ -44,6 +44,7 @@ mod uint_macros; // import uint_impl!
|
||||
mod error;
|
||||
mod int_log10;
|
||||
mod nonzero;
|
||||
mod overflow_panic;
|
||||
mod saturating;
|
||||
mod wrapping;
|
||||
|
||||
|
51
library/core/src/num/overflow_panic.rs
Normal file
51
library/core/src/num/overflow_panic.rs
Normal file
@ -0,0 +1,51 @@
|
||||
//! Functions for panicking on overflow.
|
||||
//!
|
||||
//! In particular, these are used by the `strict_` methods on integers.
|
||||
|
||||
#[cold]
|
||||
#[track_caller]
|
||||
pub const fn add() -> ! {
|
||||
panic!("attempt to add with overflow")
|
||||
}
|
||||
|
||||
#[cold]
|
||||
#[track_caller]
|
||||
pub const fn sub() -> ! {
|
||||
panic!("attempt to subtract with overflow")
|
||||
}
|
||||
|
||||
#[cold]
|
||||
#[track_caller]
|
||||
pub const fn mul() -> ! {
|
||||
panic!("attempt to multiply with overflow")
|
||||
}
|
||||
|
||||
#[cold]
|
||||
#[track_caller]
|
||||
pub const fn div() -> ! {
|
||||
panic!("attempt to divide with overflow")
|
||||
}
|
||||
|
||||
#[cold]
|
||||
#[track_caller]
|
||||
pub const fn rem() -> ! {
|
||||
panic!("attempt to calculate the remainder with overflow")
|
||||
}
|
||||
|
||||
#[cold]
|
||||
#[track_caller]
|
||||
pub const fn neg() -> ! {
|
||||
panic!("attempt to negate with overflow")
|
||||
}
|
||||
|
||||
#[cold]
|
||||
#[track_caller]
|
||||
pub const fn shr() -> ! {
|
||||
panic!("attempt to shift right with overflow")
|
||||
}
|
||||
|
||||
#[cold]
|
||||
#[track_caller]
|
||||
pub const fn shl() -> ! {
|
||||
panic!("attempt to shift left with overflow")
|
||||
}
|
@ -459,9 +459,42 @@ macro_rules! uint_impl {
|
||||
#[inline]
|
||||
pub const fn checked_add(self, rhs: Self) -> Option<Self> {
|
||||
let (a, b) = self.overflowing_add(rhs);
|
||||
if unlikely!(b) {None} else {Some(a)}
|
||||
if unlikely!(b) { None } else { Some(a) }
|
||||
}
|
||||
|
||||
/// Strict integer addition. Computes `self + rhs`, panicking
|
||||
/// if overflow occurred.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// ## Overflow behavior
|
||||
///
|
||||
/// This function will always panic on overflow, regardless of whether overflow checks are enabled.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!((", stringify!($SelfT), "::MAX - 2).strict_add(1), ", stringify!($SelfT), "::MAX - 1);")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = (", stringify!($SelfT), "::MAX - 2).strict_add(3);")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub const fn strict_add(self, rhs: Self) -> Self {
|
||||
let (a, b) = self.overflowing_add(rhs);
|
||||
if unlikely!(b) { overflow_panic ::add()} else {a}
|
||||
}
|
||||
|
||||
/// Unchecked integer addition. Computes `self + rhs`, assuming overflow
|
||||
/// cannot occur.
|
||||
///
|
||||
@ -507,9 +540,47 @@ macro_rules! uint_impl {
|
||||
#[inline]
|
||||
pub const fn checked_add_signed(self, rhs: $SignedT) -> Option<Self> {
|
||||
let (a, b) = self.overflowing_add_signed(rhs);
|
||||
if unlikely!(b) {None} else {Some(a)}
|
||||
if unlikely!(b) { None } else { Some(a) }
|
||||
}
|
||||
|
||||
/// Strict addition with a signed integer. Computes `self + rhs`,
|
||||
/// panicking if overflow occurred.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// ## Overflow behavior
|
||||
///
|
||||
/// This function will always panic on overflow, regardless of whether overflow checks are enabled.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!(1", stringify!($SelfT), ".strict_add_signed(2), 3);")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = 1", stringify!($SelfT), ".strict_add_signed(-2);")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = (", stringify!($SelfT), "::MAX - 2).strict_add_signed(3);")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub const fn strict_add_signed(self, rhs: $SignedT) -> Self {
|
||||
let (a, b) = self.overflowing_add_signed(rhs);
|
||||
if unlikely!(b) { overflow_panic ::add()} else {a}
|
||||
}
|
||||
|
||||
/// Checked integer subtraction. Computes `self - rhs`, returning
|
||||
/// `None` if overflow occurred.
|
||||
///
|
||||
@ -528,9 +599,42 @@ macro_rules! uint_impl {
|
||||
#[inline]
|
||||
pub const fn checked_sub(self, rhs: Self) -> Option<Self> {
|
||||
let (a, b) = self.overflowing_sub(rhs);
|
||||
if unlikely!(b) {None} else {Some(a)}
|
||||
if unlikely!(b) { None } else { Some(a) }
|
||||
}
|
||||
|
||||
/// Strict integer subtraction. Computes `self - rhs`, panicking if
|
||||
/// overflow occurred.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// ## Overflow behavior
|
||||
///
|
||||
/// This function will always panic on overflow, regardless of whether overflow checks are enabled.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!(1", stringify!($SelfT), ".strict_sub(1), 0);")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = 0", stringify!($SelfT), ".strict_sub(1);")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub const fn strict_sub(self, rhs: Self) -> Self {
|
||||
let (a, b) = self.overflowing_sub(rhs);
|
||||
if unlikely!(b) { overflow_panic ::sub()} else {a}
|
||||
}
|
||||
|
||||
/// Unchecked integer subtraction. Computes `self - rhs`, assuming overflow
|
||||
/// cannot occur.
|
||||
///
|
||||
@ -575,9 +679,42 @@ macro_rules! uint_impl {
|
||||
#[inline]
|
||||
pub const fn checked_mul(self, rhs: Self) -> Option<Self> {
|
||||
let (a, b) = self.overflowing_mul(rhs);
|
||||
if unlikely!(b) {None} else {Some(a)}
|
||||
if unlikely!(b) { None } else { Some(a) }
|
||||
}
|
||||
|
||||
/// Strict integer multiplication. Computes `self * rhs`, panicking if
|
||||
/// overflow occurred.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// ## Overflow behavior
|
||||
///
|
||||
/// This function will always panic on overflow, regardless of whether overflow checks are enabled.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!(5", stringify!($SelfT), ".strict_mul(1), 5);")]
|
||||
/// ```
|
||||
///
|
||||
/// ``` should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = ", stringify!($SelfT), "::MAX.strict_mul(2);")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub const fn strict_mul(self, rhs: Self) -> Self {
|
||||
let (a, b) = self.overflowing_mul(rhs);
|
||||
if unlikely!(b) { overflow_panic ::mul()} else {a}
|
||||
}
|
||||
|
||||
/// Unchecked integer multiplication. Computes `self * rhs`, assuming overflow
|
||||
/// cannot occur.
|
||||
///
|
||||
@ -630,6 +767,34 @@ macro_rules! uint_impl {
|
||||
}
|
||||
}
|
||||
|
||||
/// Strict integer division. Computes `self / rhs`.
|
||||
/// Strict division on unsigned types is just normal division.
|
||||
/// There's no way overflow could ever happen.
|
||||
/// This function exists, so that all operations
|
||||
/// are accounted for in the strict operations.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function will panic if `rhs` is zero.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!(100", stringify!($SelfT), ".strict_div(10), 10);")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline(always)]
|
||||
#[track_caller]
|
||||
pub const fn strict_div(self, rhs: Self) -> Self {
|
||||
self / rhs
|
||||
}
|
||||
|
||||
/// Checked Euclidean division. Computes `self.div_euclid(rhs)`, returning `None`
|
||||
/// if `rhs == 0`.
|
||||
///
|
||||
@ -654,6 +819,36 @@ macro_rules! uint_impl {
|
||||
}
|
||||
}
|
||||
|
||||
/// Strict Euclidean division. Computes `self.div_euclid(rhs)`.
|
||||
/// Strict division on unsigned types is just normal division.
|
||||
/// There's no way overflow could ever happen.
|
||||
/// This function exists, so that all operations
|
||||
/// are accounted for in the strict operations.
|
||||
/// Since, for the positive integers, all common
|
||||
/// definitions of division are equal, this
|
||||
/// is exactly equal to `self.strict_div(rhs)`.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function will panic if `rhs` is zero.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!(100", stringify!($SelfT), ".strict_div_euclid(10), 10);")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline(always)]
|
||||
#[track_caller]
|
||||
pub const fn strict_div_euclid(self, rhs: Self) -> Self {
|
||||
self / rhs
|
||||
}
|
||||
|
||||
/// Checked integer remainder. Computes `self % rhs`, returning `None`
|
||||
/// if `rhs == 0`.
|
||||
@ -681,6 +876,35 @@ macro_rules! uint_impl {
|
||||
}
|
||||
}
|
||||
|
||||
/// Strict integer remainder. Computes `self % rhs`.
|
||||
/// Strict remainder calculation on unsigned types is
|
||||
/// just the regular remainder calculation.
|
||||
/// There's no way overflow could ever happen.
|
||||
/// This function exists, so that all operations
|
||||
/// are accounted for in the strict operations.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function will panic if `rhs` is zero.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!(100", stringify!($SelfT), ".strict_rem(10), 0);")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline(always)]
|
||||
#[track_caller]
|
||||
pub const fn strict_rem(self, rhs: Self) -> Self {
|
||||
self % rhs
|
||||
}
|
||||
|
||||
/// Checked Euclidean modulo. Computes `self.rem_euclid(rhs)`, returning `None`
|
||||
/// if `rhs == 0`.
|
||||
///
|
||||
@ -705,6 +929,38 @@ macro_rules! uint_impl {
|
||||
}
|
||||
}
|
||||
|
||||
/// Strict Euclidean modulo. Computes `self.rem_euclid(rhs)`.
|
||||
/// Strict modulo calculation on unsigned types is
|
||||
/// just the regular remainder calculation.
|
||||
/// There's no way overflow could ever happen.
|
||||
/// This function exists, so that all operations
|
||||
/// are accounted for in the strict operations.
|
||||
/// Since, for the positive integers, all common
|
||||
/// definitions of division are equal, this
|
||||
/// is exactly equal to `self.strict_rem(rhs)`.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function will panic if `rhs` is zero.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!(100", stringify!($SelfT), ".strict_rem_euclid(10), 0);")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline(always)]
|
||||
#[track_caller]
|
||||
pub const fn strict_rem_euclid(self, rhs: Self) -> Self {
|
||||
self % rhs
|
||||
}
|
||||
|
||||
/// Returns the logarithm of the number with respect to an arbitrary base,
|
||||
/// rounded down.
|
||||
///
|
||||
@ -893,7 +1149,42 @@ macro_rules! uint_impl {
|
||||
#[inline]
|
||||
pub const fn checked_neg(self) -> Option<Self> {
|
||||
let (a, b) = self.overflowing_neg();
|
||||
if unlikely!(b) {None} else {Some(a)}
|
||||
if unlikely!(b) { None } else { Some(a) }
|
||||
}
|
||||
|
||||
/// Strict negation. Computes `-self`, panicking unless `self ==
|
||||
/// 0`.
|
||||
///
|
||||
/// Note that negating any positive integer will overflow.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// ## Overflow behavior
|
||||
///
|
||||
/// This function will always panic on overflow, regardless of whether overflow checks are enabled.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!(0", stringify!($SelfT), ".strict_neg(), 0);")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = 1", stringify!($SelfT), ".strict_neg();")]
|
||||
///
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub const fn strict_neg(self) -> Self {
|
||||
let (a, b) = self.overflowing_neg();
|
||||
if unlikely!(b) { overflow_panic::neg() } else { a }
|
||||
}
|
||||
|
||||
/// Checked shift left. Computes `self << rhs`, returning `None`
|
||||
@ -914,7 +1205,40 @@ macro_rules! uint_impl {
|
||||
#[inline]
|
||||
pub const fn checked_shl(self, rhs: u32) -> Option<Self> {
|
||||
let (a, b) = self.overflowing_shl(rhs);
|
||||
if unlikely!(b) {None} else {Some(a)}
|
||||
if unlikely!(b) { None } else { Some(a) }
|
||||
}
|
||||
|
||||
/// Strict shift left. Computes `self << rhs`, panicking if `rhs` is larger
|
||||
/// than or equal to the number of bits in `self`.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// ## Overflow behavior
|
||||
///
|
||||
/// This function will always panic on overflow, regardless of whether overflow checks are enabled.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!(0x1", stringify!($SelfT), ".strict_shl(4), 0x10);")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = 0x10", stringify!($SelfT), ".strict_shl(129);")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub const fn strict_shl(self, rhs: u32) -> Self {
|
||||
let (a, b) = self.overflowing_shl(rhs);
|
||||
if unlikely!(b) { overflow_panic::shl() } else { a }
|
||||
}
|
||||
|
||||
/// Unchecked shift left. Computes `self << rhs`, assuming that
|
||||
@ -962,7 +1286,40 @@ macro_rules! uint_impl {
|
||||
#[inline]
|
||||
pub const fn checked_shr(self, rhs: u32) -> Option<Self> {
|
||||
let (a, b) = self.overflowing_shr(rhs);
|
||||
if unlikely!(b) {None} else {Some(a)}
|
||||
if unlikely!(b) { None } else { Some(a) }
|
||||
}
|
||||
|
||||
/// Strict shift right. Computes `self >> rhs`, panicking `rhs` is
|
||||
/// larger than or equal to the number of bits in `self`.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// ## Overflow behavior
|
||||
///
|
||||
/// This function will always panic on overflow, regardless of whether overflow checks are enabled.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!(0x10", stringify!($SelfT), ".strict_shr(4), 0x1);")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = 0x10", stringify!($SelfT), ".strict_shr(129);")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub const fn strict_shr(self, rhs: u32) -> Self {
|
||||
let (a, b) = self.overflowing_shr(rhs);
|
||||
if unlikely!(b) { overflow_panic::shr() } else { a }
|
||||
}
|
||||
|
||||
/// Unchecked shift right. Computes `self >> rhs`, assuming that
|
||||
@ -1031,6 +1388,55 @@ macro_rules! uint_impl {
|
||||
acc.checked_mul(base)
|
||||
}
|
||||
|
||||
/// Strict exponentiation. Computes `self.pow(exp)`, panicking if
|
||||
/// overflow occurred.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// ## Overflow behavior
|
||||
///
|
||||
/// This function will always panic on overflow, regardless of whether overflow checks are enabled.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Basic usage:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("assert_eq!(2", stringify!($SelfT), ".strict_pow(5), 32);")]
|
||||
/// ```
|
||||
///
|
||||
/// ```should_panic
|
||||
/// #![feature(strict_overflow_ops)]
|
||||
#[doc = concat!("let _ = ", stringify!($SelfT), "::MAX.strict_pow(2);")]
|
||||
/// ```
|
||||
#[unstable(feature = "strict_overflow_ops", issue = "118260")]
|
||||
#[rustc_const_unstable(feature = "const_strict_overflow_ops", issue = "118260")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
#[track_caller]
|
||||
pub const fn strict_pow(self, mut exp: u32) -> Self {
|
||||
if exp == 0 {
|
||||
return 1;
|
||||
}
|
||||
let mut base = self;
|
||||
let mut acc: Self = 1;
|
||||
|
||||
while exp > 1 {
|
||||
if (exp & 1) == 1 {
|
||||
acc = acc.strict_mul(base);
|
||||
}
|
||||
exp /= 2;
|
||||
base = base.strict_mul(base);
|
||||
}
|
||||
// since exp!=0, finally the exp must be 1.
|
||||
// Deal with the final bit of the exponent separately, since
|
||||
// squaring the base afterwards is not necessary and may cause a
|
||||
// needless overflow.
|
||||
acc.strict_mul(base)
|
||||
}
|
||||
|
||||
/// Saturating integer addition. Computes `self + rhs`, saturating at
|
||||
/// the numeric bounds instead of overflowing.
|
||||
///
|
||||
|
@ -4,7 +4,6 @@
|
||||
mod macros;
|
||||
|
||||
use crate::cmp;
|
||||
use crate::cmp::Ordering;
|
||||
use crate::fmt;
|
||||
use crate::intrinsics::assume;
|
||||
use crate::iter::{
|
||||
@ -133,7 +132,7 @@ iterator! {struct Iter -> *const T, &'a T, const, {/* no mut */}, as_ref, {
|
||||
fn is_sorted_by<F>(self, mut compare: F) -> bool
|
||||
where
|
||||
Self: Sized,
|
||||
F: FnMut(&Self::Item, &Self::Item) -> Option<Ordering>,
|
||||
F: FnMut(&Self::Item, &Self::Item) -> bool,
|
||||
{
|
||||
self.as_slice().is_sorted_by(|a, b| compare(&a, &b))
|
||||
}
|
||||
|
@ -3957,23 +3957,36 @@ impl<T> [T] {
|
||||
where
|
||||
T: PartialOrd,
|
||||
{
|
||||
self.is_sorted_by(|a, b| a.partial_cmp(b))
|
||||
self.is_sorted_by(|a, b| a <= b)
|
||||
}
|
||||
|
||||
/// Checks if the elements of this slice are sorted using the given comparator function.
|
||||
///
|
||||
/// Instead of using `PartialOrd::partial_cmp`, this function uses the given `compare`
|
||||
/// function to determine the ordering of two elements. Apart from that, it's equivalent to
|
||||
/// [`is_sorted`]; see its documentation for more information.
|
||||
/// function to determine whether two elements are to be considered in sorted order.
|
||||
///
|
||||
/// [`is_sorted`]: slice::is_sorted
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(is_sorted)]
|
||||
///
|
||||
/// assert!([1, 2, 2, 9].is_sorted_by(|a, b| a <= b));
|
||||
/// assert!(![1, 2, 2, 9].is_sorted_by(|a, b| a < b));
|
||||
///
|
||||
/// assert!([0].is_sorted_by(|a, b| true));
|
||||
/// assert!([0].is_sorted_by(|a, b| false));
|
||||
///
|
||||
/// let empty: [i32; 0] = [];
|
||||
/// assert!(empty.is_sorted_by(|a, b| false));
|
||||
/// assert!(empty.is_sorted_by(|a, b| true));
|
||||
/// ```
|
||||
#[unstable(feature = "is_sorted", reason = "new API", issue = "53485")]
|
||||
#[must_use]
|
||||
pub fn is_sorted_by<'a, F>(&'a self, mut compare: F) -> bool
|
||||
where
|
||||
F: FnMut(&'a T, &'a T) -> Option<Ordering>,
|
||||
F: FnMut(&'a T, &'a T) -> bool,
|
||||
{
|
||||
self.array_windows().all(|[a, b]| compare(a, b).map_or(false, Ordering::is_le))
|
||||
self.array_windows().all(|[a, b]| compare(a, b))
|
||||
}
|
||||
|
||||
/// Checks if the elements of this slice are sorted using the given key extraction function.
|
||||
|
@ -1,4 +1,3 @@
|
||||
use core::cmp::Ordering;
|
||||
use core::num::NonZeroUsize;
|
||||
|
||||
/// A wrapper struct that implements `Eq` and `Ord` based on the wrapped
|
||||
@ -408,7 +407,7 @@ fn test_is_sorted() {
|
||||
|
||||
// Tests for is_sorted_by
|
||||
assert!(![6, 2, 8, 5, 1, -60, 1337].iter().is_sorted());
|
||||
assert!([6, 2, 8, 5, 1, -60, 1337].iter().is_sorted_by(|_, _| Some(Ordering::Less)));
|
||||
assert!([6, 2, 8, 5, 1, -60, 1337].iter().is_sorted_by(|_, _| true));
|
||||
|
||||
// Tests for is_sorted_by_key
|
||||
assert!([-2, -1, 0, 3].iter().is_sorted());
|
||||
|
@ -516,6 +516,7 @@ fn ipv6_properties() {
|
||||
| multicast_realm_local
|
||||
| multicast_site_local
|
||||
| multicast_organization_local;
|
||||
let ipv4_mapped: u32 = 1 << 17;
|
||||
|
||||
if ($mask & unspecified) == unspecified {
|
||||
assert!(ip!($s).is_unspecified());
|
||||
@ -592,6 +593,11 @@ fn ipv6_properties() {
|
||||
assert_eq!(ip!($s).multicast_scope().unwrap(),
|
||||
Ipv6MulticastScope::Global);
|
||||
}
|
||||
if ($mask & ipv4_mapped) == ipv4_mapped {
|
||||
assert!(ip!($s).is_ipv4_mapped());
|
||||
} else {
|
||||
assert!(!ip!($s).is_ipv4_mapped());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -610,6 +616,7 @@ fn ipv6_properties() {
|
||||
let multicast_site_local: u32 = 1 << 13;
|
||||
let multicast_organization_local: u32 = 1 << 14;
|
||||
let multicast_global: u32 = 1 << 15;
|
||||
let ipv4_mapped: u32 = 1 << 17;
|
||||
|
||||
check!("::", &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], unspecified);
|
||||
|
||||
@ -622,7 +629,7 @@ fn ipv6_properties() {
|
||||
check!(
|
||||
"::ffff:127.0.0.1",
|
||||
&[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0x7f, 0, 0, 1],
|
||||
unicast_global
|
||||
unicast_global | ipv4_mapped
|
||||
);
|
||||
|
||||
check!(
|
||||
@ -996,6 +1003,9 @@ fn ipv6_const() {
|
||||
const IS_MULTICAST: bool = IP_ADDRESS.is_multicast();
|
||||
assert!(!IS_MULTICAST);
|
||||
|
||||
const IS_IPV4_MAPPED: bool = IP_ADDRESS.is_ipv4_mapped();
|
||||
assert!(!IS_IPV4_MAPPED);
|
||||
|
||||
const IP_V4: Option<Ipv4Addr> = IP_ADDRESS.to_ipv4();
|
||||
assert_eq!(IP_V4.unwrap(), Ipv4Addr::new(0, 0, 0, 1));
|
||||
}
|
||||
|
@ -2307,7 +2307,7 @@ fn test_is_sorted() {
|
||||
|
||||
// Tests for is_sorted_by
|
||||
assert!(![6, 2, 8, 5, 1, -60, 1337].is_sorted());
|
||||
assert!([6, 2, 8, 5, 1, -60, 1337].is_sorted_by(|_, _| Some(Ordering::Less)));
|
||||
assert!([6, 2, 8, 5, 1, -60, 1337].is_sorted_by(|_, _| true));
|
||||
|
||||
// Tests for is_sorted_by_key
|
||||
assert!([-2, -1, 0, 3].is_sorted());
|
||||
|
@ -3,6 +3,7 @@
|
||||
/// descriptors.
|
||||
mod pal;
|
||||
|
||||
pub mod os_str;
|
||||
mod personality;
|
||||
|
||||
// FIXME(117276): remove this, move feature implementations into individual
|
||||
|
@ -14,7 +14,6 @@ use crate::sys_common::{AsInner, IntoInner};
|
||||
use core::str::Utf8Chunks;
|
||||
|
||||
#[cfg(test)]
|
||||
#[path = "../unix/os_str/tests.rs"]
|
||||
mod tests;
|
||||
|
||||
#[derive(Hash)]
|
12
library/std/src/sys/os_str/mod.rs
Normal file
12
library/std/src/sys/os_str/mod.rs
Normal file
@ -0,0 +1,12 @@
|
||||
cfg_if::cfg_if! {
|
||||
if #[cfg(any(
|
||||
target_os = "windows",
|
||||
target_os = "uefi",
|
||||
))] {
|
||||
mod wtf8;
|
||||
pub use wtf8::{Buf, Slice};
|
||||
} else {
|
||||
mod bytes;
|
||||
pub use bytes::{Buf, Slice};
|
||||
}
|
||||
}
|
@ -30,8 +30,6 @@ pub mod io;
|
||||
pub mod memchr;
|
||||
pub mod net;
|
||||
pub mod os;
|
||||
#[path = "../unix/os_str.rs"]
|
||||
pub mod os_str;
|
||||
#[path = "../unix/path.rs"]
|
||||
pub mod path;
|
||||
#[path = "../unsupported/pipe.rs"]
|
||||
|
@ -24,8 +24,6 @@ pub mod io;
|
||||
pub mod memchr;
|
||||
pub mod net;
|
||||
pub mod os;
|
||||
#[path = "../unix/os_str.rs"]
|
||||
pub mod os_str;
|
||||
pub mod path;
|
||||
#[path = "../unsupported/pipe.rs"]
|
||||
pub mod pipe;
|
||||
|
@ -31,8 +31,6 @@ pub mod fs;
|
||||
pub mod io;
|
||||
pub mod net;
|
||||
pub mod os;
|
||||
#[path = "../unix/os_str.rs"]
|
||||
pub mod os_str;
|
||||
pub mod path;
|
||||
#[path = "../unsupported/pipe.rs"]
|
||||
pub mod pipe;
|
||||
|
@ -27,8 +27,6 @@ pub mod net;
|
||||
#[path = "../unsupported/once.rs"]
|
||||
pub mod once;
|
||||
pub mod os;
|
||||
#[path = "../unix/os_str.rs"]
|
||||
pub mod os_str;
|
||||
#[path = "../unix/path.rs"]
|
||||
pub mod path;
|
||||
#[path = "../unsupported/pipe.rs"]
|
||||
|
@ -28,8 +28,6 @@ pub mod net;
|
||||
#[path = "../unsupported/once.rs"]
|
||||
pub mod once;
|
||||
pub mod os;
|
||||
#[path = "../windows/os_str.rs"]
|
||||
pub mod os_str;
|
||||
pub mod path;
|
||||
#[path = "../unsupported/pipe.rs"]
|
||||
pub mod pipe;
|
||||
|
@ -29,7 +29,6 @@ pub mod net;
|
||||
#[cfg(target_os = "l4re")]
|
||||
pub use self::l4re::net;
|
||||
pub mod os;
|
||||
pub mod os_str;
|
||||
pub mod path;
|
||||
pub mod pipe;
|
||||
pub mod process;
|
||||
|
@ -11,8 +11,6 @@ pub mod locks;
|
||||
pub mod net;
|
||||
pub mod once;
|
||||
pub mod os;
|
||||
#[path = "../unix/os_str.rs"]
|
||||
pub mod os_str;
|
||||
#[path = "../unix/path.rs"]
|
||||
pub mod path;
|
||||
pub mod pipe;
|
||||
|
@ -32,8 +32,6 @@ pub mod io;
|
||||
|
||||
pub mod net;
|
||||
pub mod os;
|
||||
#[path = "../unix/os_str.rs"]
|
||||
pub mod os_str;
|
||||
#[path = "../unix/path.rs"]
|
||||
pub mod path;
|
||||
#[path = "../unsupported/pipe.rs"]
|
||||
|
@ -30,8 +30,6 @@ pub mod io;
|
||||
pub mod net;
|
||||
#[path = "../unsupported/os.rs"]
|
||||
pub mod os;
|
||||
#[path = "../unix/os_str.rs"]
|
||||
pub mod os_str;
|
||||
#[path = "../unix/path.rs"]
|
||||
pub mod path;
|
||||
#[path = "../unsupported/pipe.rs"]
|
||||
|
@ -24,7 +24,6 @@ pub mod locks;
|
||||
pub mod memchr;
|
||||
pub mod net;
|
||||
pub mod os;
|
||||
pub mod os_str;
|
||||
pub mod path;
|
||||
pub mod pipe;
|
||||
pub mod process;
|
||||
|
@ -17,8 +17,6 @@ pub mod net;
|
||||
#[path = "../unsupported/once.rs"]
|
||||
pub mod once;
|
||||
pub mod os;
|
||||
#[path = "../unix/os_str.rs"]
|
||||
pub mod os_str;
|
||||
#[path = "../unix/path.rs"]
|
||||
pub mod path;
|
||||
#[path = "../unsupported/pipe.rs"]
|
||||
|
@ -92,12 +92,24 @@ fn main() {
|
||||
panic!("proc-macro-test-impl failed to build");
|
||||
}
|
||||
|
||||
// Old Package ID Spec
|
||||
let repr = format!("{name} {version}");
|
||||
// New Package Id Spec since rust-lang/cargo#13311
|
||||
let pkgid = String::from_utf8(
|
||||
Command::new(toolchain::cargo())
|
||||
.current_dir(&staging_dir)
|
||||
.args(["pkgid", name])
|
||||
.output()
|
||||
.unwrap().stdout,
|
||||
)
|
||||
.unwrap();
|
||||
let pkgid = pkgid.trim();
|
||||
|
||||
let mut artifact_path = None;
|
||||
for message in Message::parse_stream(output.stdout.as_slice()) {
|
||||
if let Message::CompilerArtifact(artifact) = message.unwrap() {
|
||||
if artifact.target.kind.contains(&"proc-macro".to_string()) {
|
||||
let repr = format!("{name} {version}");
|
||||
if artifact.package_id.repr.starts_with(&repr) {
|
||||
if artifact.package_id.repr.starts_with(&repr) || artifact.package_id.repr == pkgid {
|
||||
artifact_path = Some(PathBuf::from(&artifact.filenames[0]));
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
Function name: abort::main
|
||||
Raw bytes (105): 0x[01, 01, 12, 01, 47, 05, 09, 03, 0d, 42, 11, 03, 0d, 11, 3e, 42, 11, 03, 0d, 3b, 15, 11, 3e, 42, 11, 03, 0d, 15, 36, 3b, 15, 11, 3e, 42, 11, 03, 0d, 05, 09, 0d, 01, 0d, 01, 01, 1b, 03, 02, 0b, 00, 18, 42, 01, 0c, 00, 19, 11, 00, 1a, 02, 0a, 3e, 02, 0a, 00, 0b, 3b, 02, 0c, 00, 19, 15, 00, 1a, 00, 31, 36, 00, 31, 00, 32, 33, 04, 0c, 00, 19, 05, 00, 1a, 00, 31, 09, 00, 31, 00, 32, 47, 01, 09, 00, 17, 0d, 02, 05, 01, 02]
|
||||
Raw bytes (105): 0x[01, 01, 12, 01, 47, 05, 09, 03, 0d, 42, 11, 03, 0d, 11, 3e, 42, 11, 03, 0d, 3b, 15, 11, 3e, 42, 11, 03, 0d, 15, 36, 3b, 15, 11, 3e, 42, 11, 03, 0d, 05, 09, 0d, 01, 0e, 01, 01, 1b, 03, 02, 0b, 00, 18, 42, 01, 0c, 00, 19, 11, 00, 1a, 02, 0a, 3e, 02, 0a, 00, 0b, 3b, 02, 0c, 00, 19, 15, 00, 1a, 00, 31, 36, 00, 31, 00, 32, 33, 04, 0c, 00, 19, 05, 00, 1a, 00, 31, 09, 00, 31, 00, 32, 47, 01, 09, 00, 17, 0d, 02, 05, 01, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 18
|
||||
@ -22,7 +22,7 @@ Number of expressions: 18
|
||||
- expression 16 operands: lhs = Expression(0, Add), rhs = Counter(3)
|
||||
- expression 17 operands: lhs = Counter(1), rhs = Counter(2)
|
||||
Number of file 0 mappings: 13
|
||||
- Code(Counter(0)) at (prev + 13, 1) to (start + 1, 27)
|
||||
- Code(Counter(0)) at (prev + 14, 1) to (start + 1, 27)
|
||||
- Code(Expression(0, Add)) at (prev + 2, 11) to (start + 0, 24)
|
||||
= (c0 + (c1 + c2))
|
||||
- Code(Expression(16, Sub)) at (prev + 1, 12) to (start + 0, 25)
|
||||
|
@ -10,6 +10,7 @@
|
||||
LL| 12| }
|
||||
LL| 12|}
|
||||
LL| |
|
||||
LL| |#[rustfmt::skip]
|
||||
LL| 1|fn main() -> Result<(), u8> {
|
||||
LL| 1| let mut countdown = 10;
|
||||
LL| 11| while countdown > 0 {
|
||||
|
@ -10,6 +10,7 @@ extern "C" fn might_abort(should_abort: bool) {
|
||||
}
|
||||
}
|
||||
|
||||
#[rustfmt::skip]
|
||||
fn main() -> Result<(), u8> {
|
||||
let mut countdown = 10;
|
||||
while countdown > 0 {
|
||||
|
@ -1,20 +1,20 @@
|
||||
Function name: async::c
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 07, 01, 00, 19]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 09, 01, 00, 19]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 7, 1) to (start + 0, 25)
|
||||
- Code(Counter(0)) at (prev + 9, 1) to (start + 0, 25)
|
||||
|
||||
Function name: async::c::{closure#0}
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 07, 19, 01, 0e, 05, 02, 09, 00, 0a, 02, 02, 09, 00, 0a, 07, 02, 01, 00, 02]
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 09, 19, 01, 0e, 05, 02, 09, 00, 0a, 02, 02, 09, 00, 0a, 07, 02, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 7, 25) to (start + 1, 14)
|
||||
- Code(Counter(0)) at (prev + 9, 25) to (start + 1, 14)
|
||||
- Code(Counter(1)) at (prev + 2, 9) to (start + 0, 10)
|
||||
- Code(Expression(0, Sub)) at (prev + 2, 9) to (start + 0, 10)
|
||||
= (c0 - c1)
|
||||
@ -22,84 +22,84 @@ Number of file 0 mappings: 4
|
||||
= (c1 + (c0 - c1))
|
||||
|
||||
Function name: async::d
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 0f, 01, 00, 14]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 11, 01, 00, 14]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 15, 1) to (start + 0, 20)
|
||||
- Code(Counter(0)) at (prev + 17, 1) to (start + 0, 20)
|
||||
|
||||
Function name: async::d::{closure#0}
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 0f, 14, 00, 19]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 11, 14, 00, 19]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 15, 20) to (start + 0, 25)
|
||||
- Code(Counter(0)) at (prev + 17, 20) to (start + 0, 25)
|
||||
|
||||
Function name: async::e (unused)
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 00, 11, 01, 00, 14]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 00, 13, 01, 00, 14]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Zero) at (prev + 17, 1) to (start + 0, 20)
|
||||
- Code(Zero) at (prev + 19, 1) to (start + 0, 20)
|
||||
|
||||
Function name: async::e::{closure#0} (unused)
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 00, 11, 14, 00, 19]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 00, 13, 14, 00, 19]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Zero) at (prev + 17, 20) to (start + 0, 25)
|
||||
- Code(Zero) at (prev + 19, 20) to (start + 0, 25)
|
||||
|
||||
Function name: async::f
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 13, 01, 00, 14]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 15, 01, 00, 14]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 19, 1) to (start + 0, 20)
|
||||
- Code(Counter(0)) at (prev + 21, 1) to (start + 0, 20)
|
||||
|
||||
Function name: async::f::{closure#0}
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 13, 14, 00, 19]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 15, 14, 00, 19]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 19, 20) to (start + 0, 25)
|
||||
- Code(Counter(0)) at (prev + 21, 20) to (start + 0, 25)
|
||||
|
||||
Function name: async::foo (unused)
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 00, 15, 01, 00, 1e]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 00, 17, 01, 00, 1e]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Zero) at (prev + 21, 1) to (start + 0, 30)
|
||||
- Code(Zero) at (prev + 23, 1) to (start + 0, 30)
|
||||
|
||||
Function name: async::foo::{closure#0} (unused)
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 00, 15, 1e, 00, 2d]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 00, 17, 1e, 00, 2d]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Zero) at (prev + 21, 30) to (start + 0, 45)
|
||||
- Code(Zero) at (prev + 23, 30) to (start + 0, 45)
|
||||
|
||||
Function name: async::g
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 17, 01, 00, 17]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 19, 01, 00, 17]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 23, 1) to (start + 0, 23)
|
||||
- Code(Counter(0)) at (prev + 25, 1) to (start + 0, 23)
|
||||
|
||||
Function name: async::g::{closure#0} (unused)
|
||||
Raw bytes (69): 0x[01, 01, 00, 0d, 00, 17, 17, 01, 0c, 00, 02, 09, 00, 0a, 00, 00, 0e, 00, 11, 00, 00, 12, 00, 17, 00, 00, 1b, 00, 1c, 00, 00, 20, 00, 22, 00, 01, 09, 00, 0a, 00, 00, 0e, 00, 11, 00, 00, 12, 00, 17, 00, 00, 1b, 00, 1c, 00, 00, 20, 00, 22, 00, 01, 0e, 00, 10, 00, 02, 01, 00, 02]
|
||||
Raw bytes (69): 0x[01, 01, 00, 0d, 00, 19, 17, 01, 0c, 00, 02, 09, 00, 0a, 00, 00, 0e, 00, 11, 00, 00, 12, 00, 17, 00, 00, 1b, 00, 1c, 00, 00, 20, 00, 22, 00, 01, 09, 00, 0a, 00, 00, 0e, 00, 11, 00, 00, 12, 00, 17, 00, 00, 1b, 00, 1c, 00, 00, 20, 00, 22, 00, 01, 0e, 00, 10, 00, 02, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 13
|
||||
- Code(Zero) at (prev + 23, 23) to (start + 1, 12)
|
||||
- Code(Zero) at (prev + 25, 23) to (start + 1, 12)
|
||||
- Code(Zero) at (prev + 2, 9) to (start + 0, 10)
|
||||
- Code(Zero) at (prev + 0, 14) to (start + 0, 17)
|
||||
- Code(Zero) at (prev + 0, 18) to (start + 0, 23)
|
||||
@ -114,20 +114,20 @@ Number of file 0 mappings: 13
|
||||
- Code(Zero) at (prev + 2, 1) to (start + 0, 2)
|
||||
|
||||
Function name: async::h
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 1f, 01, 00, 16]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 21, 01, 00, 16]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 31, 1) to (start + 0, 22)
|
||||
- Code(Counter(0)) at (prev + 33, 1) to (start + 0, 22)
|
||||
|
||||
Function name: async::h::{closure#0} (unused)
|
||||
Raw bytes (44): 0x[01, 01, 00, 08, 00, 1f, 16, 03, 0c, 00, 04, 09, 00, 0a, 00, 00, 0e, 00, 13, 00, 00, 14, 00, 19, 00, 00, 1a, 00, 1b, 00, 00, 20, 00, 22, 00, 01, 0e, 00, 10, 00, 02, 01, 00, 02]
|
||||
Raw bytes (44): 0x[01, 01, 00, 08, 00, 21, 16, 03, 0c, 00, 04, 09, 00, 0a, 00, 00, 0e, 00, 13, 00, 00, 14, 00, 19, 00, 00, 1a, 00, 1b, 00, 00, 20, 00, 22, 00, 01, 0e, 00, 10, 00, 02, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 8
|
||||
- Code(Zero) at (prev + 31, 22) to (start + 3, 12)
|
||||
- Code(Zero) at (prev + 33, 22) to (start + 3, 12)
|
||||
- Code(Zero) at (prev + 4, 9) to (start + 0, 10)
|
||||
- Code(Zero) at (prev + 0, 14) to (start + 0, 19)
|
||||
- Code(Zero) at (prev + 0, 20) to (start + 0, 25)
|
||||
@ -137,22 +137,22 @@ Number of file 0 mappings: 8
|
||||
- Code(Zero) at (prev + 2, 1) to (start + 0, 2)
|
||||
|
||||
Function name: async::i
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 28, 01, 00, 13]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 2a, 01, 00, 13]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 40, 1) to (start + 0, 19)
|
||||
- Code(Counter(0)) at (prev + 42, 1) to (start + 0, 19)
|
||||
|
||||
Function name: async::i::{closure#0}
|
||||
Raw bytes (78): 0x[01, 01, 02, 07, 21, 19, 1d, 0e, 01, 28, 13, 04, 0c, 0d, 05, 09, 00, 0a, 01, 00, 0e, 00, 12, 05, 00, 13, 00, 18, 09, 00, 1c, 00, 21, 0d, 00, 27, 00, 2a, 15, 00, 2b, 00, 30, 1d, 01, 09, 00, 0a, 11, 00, 0e, 00, 11, 25, 00, 12, 00, 17, 29, 00, 1b, 00, 20, 1d, 00, 24, 00, 26, 21, 01, 0e, 00, 10, 03, 02, 01, 00, 02]
|
||||
Raw bytes (78): 0x[01, 01, 02, 07, 21, 19, 1d, 0e, 01, 2a, 13, 04, 0c, 0d, 05, 09, 00, 0a, 01, 00, 0e, 00, 12, 05, 00, 13, 00, 18, 09, 00, 1c, 00, 21, 0d, 00, 27, 00, 2a, 15, 00, 2b, 00, 30, 1d, 01, 09, 00, 0a, 11, 00, 0e, 00, 11, 25, 00, 12, 00, 17, 29, 00, 1b, 00, 20, 1d, 00, 24, 00, 26, 21, 01, 0e, 00, 10, 03, 02, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Expression(1, Add), rhs = Counter(8)
|
||||
- expression 1 operands: lhs = Counter(6), rhs = Counter(7)
|
||||
Number of file 0 mappings: 14
|
||||
- Code(Counter(0)) at (prev + 40, 19) to (start + 4, 12)
|
||||
- Code(Counter(0)) at (prev + 42, 19) to (start + 4, 12)
|
||||
- Code(Counter(3)) at (prev + 5, 9) to (start + 0, 10)
|
||||
- Code(Counter(0)) at (prev + 0, 14) to (start + 0, 18)
|
||||
- Code(Counter(1)) at (prev + 0, 19) to (start + 0, 24)
|
||||
@ -169,14 +169,14 @@ Number of file 0 mappings: 14
|
||||
= ((c6 + c7) + c8)
|
||||
|
||||
Function name: async::j
|
||||
Raw bytes (53): 0x[01, 01, 02, 07, 0d, 05, 09, 09, 01, 33, 01, 13, 0c, 05, 14, 09, 00, 0a, 01, 00, 0e, 00, 1b, 05, 00, 1f, 00, 27, 09, 01, 09, 00, 0a, 11, 00, 0e, 00, 1a, 09, 00, 1e, 00, 20, 0d, 01, 0e, 00, 10, 03, 02, 01, 00, 02]
|
||||
Raw bytes (53): 0x[01, 01, 02, 07, 0d, 05, 09, 09, 01, 35, 01, 13, 0c, 05, 14, 09, 00, 0a, 01, 00, 0e, 00, 1b, 05, 00, 1f, 00, 27, 09, 01, 09, 00, 0a, 11, 00, 0e, 00, 1a, 09, 00, 1e, 00, 20, 0d, 01, 0e, 00, 10, 03, 02, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Expression(1, Add), rhs = Counter(3)
|
||||
- expression 1 operands: lhs = Counter(1), rhs = Counter(2)
|
||||
Number of file 0 mappings: 9
|
||||
- Code(Counter(0)) at (prev + 51, 1) to (start + 19, 12)
|
||||
- Code(Counter(0)) at (prev + 53, 1) to (start + 19, 12)
|
||||
- Code(Counter(1)) at (prev + 20, 9) to (start + 0, 10)
|
||||
- Code(Counter(0)) at (prev + 0, 14) to (start + 0, 27)
|
||||
- Code(Counter(1)) at (prev + 0, 31) to (start + 0, 39)
|
||||
@ -188,14 +188,14 @@ Number of file 0 mappings: 9
|
||||
= ((c1 + c2) + c3)
|
||||
|
||||
Function name: async::j::c
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 35, 05, 01, 12, 05, 02, 0d, 00, 0e, 02, 0a, 0d, 00, 0e, 07, 02, 05, 00, 06]
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 37, 05, 01, 12, 05, 02, 0d, 00, 0e, 02, 0a, 0d, 00, 0e, 07, 02, 05, 00, 06]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 53, 5) to (start + 1, 18)
|
||||
- Code(Counter(0)) at (prev + 55, 5) to (start + 1, 18)
|
||||
- Code(Counter(1)) at (prev + 2, 13) to (start + 0, 14)
|
||||
- Code(Expression(0, Sub)) at (prev + 10, 13) to (start + 0, 14)
|
||||
= (c0 - c1)
|
||||
@ -203,35 +203,35 @@ Number of file 0 mappings: 4
|
||||
= (c1 + (c0 - c1))
|
||||
|
||||
Function name: async::j::d
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 44, 05, 00, 17]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 46, 05, 00, 17]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 68, 5) to (start + 0, 23)
|
||||
- Code(Counter(0)) at (prev + 70, 5) to (start + 0, 23)
|
||||
|
||||
Function name: async::j::f
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 45, 05, 00, 17]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 47, 05, 00, 17]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 69, 5) to (start + 0, 23)
|
||||
- Code(Counter(0)) at (prev + 71, 5) to (start + 0, 23)
|
||||
|
||||
Function name: async::k (unused)
|
||||
Raw bytes (29): 0x[01, 01, 00, 05, 00, 4d, 01, 01, 0c, 00, 02, 0e, 00, 10, 00, 01, 0e, 00, 10, 00, 01, 0e, 00, 10, 00, 02, 01, 00, 02]
|
||||
Raw bytes (29): 0x[01, 01, 00, 05, 00, 4f, 01, 01, 0c, 00, 02, 0e, 00, 10, 00, 01, 0e, 00, 10, 00, 01, 0e, 00, 10, 00, 02, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 5
|
||||
- Code(Zero) at (prev + 77, 1) to (start + 1, 12)
|
||||
- Code(Zero) at (prev + 79, 1) to (start + 1, 12)
|
||||
- Code(Zero) at (prev + 2, 14) to (start + 0, 16)
|
||||
- Code(Zero) at (prev + 1, 14) to (start + 0, 16)
|
||||
- Code(Zero) at (prev + 1, 14) to (start + 0, 16)
|
||||
- Code(Zero) at (prev + 2, 1) to (start + 0, 2)
|
||||
|
||||
Function name: async::l
|
||||
Raw bytes (37): 0x[01, 01, 04, 01, 07, 05, 09, 0f, 02, 09, 05, 05, 01, 55, 01, 01, 0c, 02, 02, 0e, 00, 10, 05, 01, 0e, 00, 10, 09, 01, 0e, 00, 10, 0b, 02, 01, 00, 02]
|
||||
Raw bytes (37): 0x[01, 01, 04, 01, 07, 05, 09, 0f, 02, 09, 05, 05, 01, 57, 01, 01, 0c, 02, 02, 0e, 00, 10, 05, 01, 0e, 00, 10, 09, 01, 0e, 00, 10, 0b, 02, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 4
|
||||
@ -240,7 +240,7 @@ Number of expressions: 4
|
||||
- expression 2 operands: lhs = Expression(3, Add), rhs = Expression(0, Sub)
|
||||
- expression 3 operands: lhs = Counter(2), rhs = Counter(1)
|
||||
Number of file 0 mappings: 5
|
||||
- Code(Counter(0)) at (prev + 85, 1) to (start + 1, 12)
|
||||
- Code(Counter(0)) at (prev + 87, 1) to (start + 1, 12)
|
||||
- Code(Expression(0, Sub)) at (prev + 2, 14) to (start + 0, 16)
|
||||
= (c0 - (c1 + c2))
|
||||
- Code(Counter(1)) at (prev + 1, 14) to (start + 0, 16)
|
||||
@ -249,26 +249,26 @@ Number of file 0 mappings: 5
|
||||
= ((c2 + c1) + (c0 - (c1 + c2)))
|
||||
|
||||
Function name: async::m
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 5d, 01, 00, 19]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 5f, 01, 00, 19]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 93, 1) to (start + 0, 25)
|
||||
- Code(Counter(0)) at (prev + 95, 1) to (start + 0, 25)
|
||||
|
||||
Function name: async::m::{closure#0} (unused)
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 00, 5d, 19, 00, 22]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 00, 5f, 19, 00, 22]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Zero) at (prev + 93, 25) to (start + 0, 34)
|
||||
- Code(Zero) at (prev + 95, 25) to (start + 0, 34)
|
||||
|
||||
Function name: async::main
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 5f, 01, 08, 02]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 61, 01, 08, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 95, 1) to (start + 8, 2)
|
||||
- Code(Counter(0)) at (prev + 97, 1) to (start + 8, 2)
|
||||
|
||||
|
@ -1,6 +1,8 @@
|
||||
LL| |#![feature(coverage_attribute)]
|
||||
LL| |#![feature(custom_inner_attributes)] // for #![rustfmt::skip]
|
||||
LL| |#![feature(noop_waker)]
|
||||
LL| |#![allow(unused_assignments, dead_code)]
|
||||
LL| |#![rustfmt::skip]
|
||||
LL| |// edition: 2018
|
||||
LL| |// compile-flags: -Copt-level=1
|
||||
LL| |
|
||||
|
@ -1,6 +1,8 @@
|
||||
#![feature(coverage_attribute)]
|
||||
#![feature(custom_inner_attributes)] // for #![rustfmt::skip]
|
||||
#![feature(noop_waker)]
|
||||
#![allow(unused_assignments, dead_code)]
|
||||
#![rustfmt::skip]
|
||||
// edition: 2018
|
||||
// compile-flags: -Copt-level=1
|
||||
|
||||
|
@ -1,12 +1,12 @@
|
||||
Function name: closure::main
|
||||
Raw bytes (128): 0x[01, 01, 02, 01, 05, 05, 02, 18, 01, 08, 01, 0f, 0d, 01, 16, 0e, 06, 0a, 01, 10, 05, 13, 0d, 01, 1a, 0e, 06, 0a, 01, 10, 05, 0c, 16, 01, 16, 05, 0d, 18, 01, 19, 09, 01, 1e, 01, 04, 09, 00, 29, 01, 01, 09, 00, 2d, 01, 01, 09, 00, 24, 01, 05, 09, 00, 24, 01, 02, 09, 00, 21, 01, 04, 09, 00, 21, 01, 04, 09, 00, 28, 01, 09, 09, 00, 32, 01, 04, 09, 00, 33, 01, 07, 09, 00, 4b, 01, 08, 09, 00, 48, 01, 0a, 09, 00, 47, 01, 08, 09, 00, 44, 01, 0a, 08, 00, 10, 05, 00, 11, 04, 06, 02, 04, 06, 00, 07, 07, 01, 05, 03, 02]
|
||||
Raw bytes (128): 0x[01, 01, 02, 01, 05, 05, 02, 18, 01, 09, 01, 0f, 0d, 01, 16, 0e, 06, 0a, 01, 10, 05, 13, 0d, 01, 1a, 0e, 06, 0a, 01, 10, 05, 0c, 16, 01, 16, 05, 0d, 18, 01, 19, 09, 01, 1e, 01, 04, 09, 00, 29, 01, 01, 09, 00, 2d, 01, 01, 09, 00, 24, 01, 05, 09, 00, 24, 01, 02, 09, 00, 21, 01, 04, 09, 00, 21, 01, 04, 09, 00, 28, 01, 09, 09, 00, 32, 01, 04, 09, 00, 33, 01, 07, 09, 00, 4b, 01, 08, 09, 00, 48, 01, 0a, 09, 00, 47, 01, 08, 09, 00, 44, 01, 0a, 08, 00, 10, 05, 00, 11, 04, 06, 02, 04, 06, 00, 07, 07, 01, 05, 03, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 24
|
||||
- Code(Counter(0)) at (prev + 8, 1) to (start + 15, 13)
|
||||
- Code(Counter(0)) at (prev + 9, 1) to (start + 15, 13)
|
||||
- Code(Counter(0)) at (prev + 22, 14) to (start + 6, 10)
|
||||
- Code(Counter(0)) at (prev + 16, 5) to (start + 19, 13)
|
||||
- Code(Counter(0)) at (prev + 26, 14) to (start + 6, 10)
|
||||
@ -34,14 +34,14 @@ Number of file 0 mappings: 24
|
||||
= (c1 + (c0 - c1))
|
||||
|
||||
Function name: closure::main::{closure#0}
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 27, 05, 02, 14, 05, 02, 15, 02, 0a, 02, 02, 0a, 00, 0b, 07, 01, 09, 01, 06]
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 28, 05, 02, 14, 05, 02, 15, 02, 0a, 02, 02, 0a, 00, 0b, 07, 01, 09, 01, 06]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 39, 5) to (start + 2, 20)
|
||||
- Code(Counter(0)) at (prev + 40, 5) to (start + 2, 20)
|
||||
- Code(Counter(1)) at (prev + 2, 21) to (start + 2, 10)
|
||||
- Code(Expression(0, Sub)) at (prev + 2, 10) to (start + 0, 11)
|
||||
= (c0 - c1)
|
||||
@ -49,46 +49,46 @@ Number of file 0 mappings: 4
|
||||
= (c1 + (c0 - c1))
|
||||
|
||||
Function name: closure::main::{closure#10} (unused)
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 00, 9a, 01, 07, 00, 21]
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 00, 9b, 01, 07, 00, 21]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Zero) at (prev + 154, 7) to (start + 0, 33)
|
||||
- Code(Zero) at (prev + 155, 7) to (start + 0, 33)
|
||||
|
||||
Function name: closure::main::{closure#11} (unused)
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 00, 9e, 01, 07, 00, 21]
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 00, 9f, 01, 07, 00, 21]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Zero) at (prev + 158, 7) to (start + 0, 33)
|
||||
- Code(Zero) at (prev + 159, 7) to (start + 0, 33)
|
||||
|
||||
Function name: closure::main::{closure#12} (unused)
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 00, a6, 01, 01, 00, 17]
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 00, a7, 01, 01, 00, 17]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Zero) at (prev + 166, 1) to (start + 0, 23)
|
||||
- Code(Zero) at (prev + 167, 1) to (start + 0, 23)
|
||||
|
||||
Function name: closure::main::{closure#13} (unused)
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 00, ab, 01, 0d, 02, 0e]
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 00, ac, 01, 0d, 02, 0e]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Zero) at (prev + 171, 13) to (start + 2, 14)
|
||||
- Code(Zero) at (prev + 172, 13) to (start + 2, 14)
|
||||
|
||||
Function name: closure::main::{closure#14}
|
||||
Raw bytes (29): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, b2, 01, 0d, 02, 1b, 05, 02, 1e, 00, 25, 02, 00, 2f, 00, 33, 07, 01, 0d, 00, 0e]
|
||||
Raw bytes (29): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, b3, 01, 0d, 02, 1b, 05, 02, 1e, 00, 25, 02, 00, 2f, 00, 33, 07, 01, 0d, 00, 0e]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 178, 13) to (start + 2, 27)
|
||||
- Code(Counter(0)) at (prev + 179, 13) to (start + 2, 27)
|
||||
- Code(Counter(1)) at (prev + 2, 30) to (start + 0, 37)
|
||||
- Code(Expression(0, Sub)) at (prev + 0, 47) to (start + 0, 51)
|
||||
= (c0 - c1)
|
||||
@ -96,7 +96,7 @@ Number of file 0 mappings: 4
|
||||
= (c1 + (c0 - c1))
|
||||
|
||||
Function name: closure::main::{closure#15}
|
||||
Raw bytes (41): 0x[01, 01, 03, 05, 0a, 01, 05, 01, 05, 06, 01, ba, 01, 09, 00, 0a, 03, 01, 0d, 00, 15, 01, 01, 11, 01, 1b, 05, 01, 1e, 00, 25, 0a, 00, 2f, 00, 33, 03, 02, 09, 00, 0a]
|
||||
Raw bytes (41): 0x[01, 01, 03, 05, 0a, 01, 05, 01, 05, 06, 01, bb, 01, 09, 00, 0a, 03, 01, 0d, 00, 15, 01, 01, 11, 01, 1b, 05, 01, 1e, 00, 25, 0a, 00, 2f, 00, 33, 03, 02, 09, 00, 0a]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 3
|
||||
@ -104,7 +104,7 @@ Number of expressions: 3
|
||||
- expression 1 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
- expression 2 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
Number of file 0 mappings: 6
|
||||
- Code(Counter(0)) at (prev + 186, 9) to (start + 0, 10)
|
||||
- Code(Counter(0)) at (prev + 187, 9) to (start + 0, 10)
|
||||
- Code(Expression(0, Add)) at (prev + 1, 13) to (start + 0, 21)
|
||||
= (c1 + (c0 - c1))
|
||||
- Code(Counter(0)) at (prev + 1, 17) to (start + 1, 27)
|
||||
@ -115,14 +115,14 @@ Number of file 0 mappings: 6
|
||||
= (c1 + (c0 - c1))
|
||||
|
||||
Function name: closure::main::{closure#16}
|
||||
Raw bytes (29): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, c4, 01, 0d, 02, 1b, 05, 02, 1e, 00, 25, 02, 00, 2f, 00, 33, 07, 01, 0d, 00, 0e]
|
||||
Raw bytes (29): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, c5, 01, 0d, 02, 1b, 05, 02, 1e, 00, 25, 02, 00, 2f, 00, 33, 07, 01, 0d, 00, 0e]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 196, 13) to (start + 2, 27)
|
||||
- Code(Counter(0)) at (prev + 197, 13) to (start + 2, 27)
|
||||
- Code(Counter(1)) at (prev + 2, 30) to (start + 0, 37)
|
||||
- Code(Expression(0, Sub)) at (prev + 0, 47) to (start + 0, 51)
|
||||
= (c0 - c1)
|
||||
@ -130,7 +130,7 @@ Number of file 0 mappings: 4
|
||||
= (c1 + (c0 - c1))
|
||||
|
||||
Function name: closure::main::{closure#17}
|
||||
Raw bytes (41): 0x[01, 01, 03, 05, 0a, 01, 05, 01, 05, 06, 01, cc, 01, 09, 00, 0a, 03, 01, 0d, 00, 15, 01, 01, 11, 01, 1b, 05, 01, 1e, 00, 25, 0a, 00, 2f, 00, 33, 03, 02, 09, 00, 0a]
|
||||
Raw bytes (41): 0x[01, 01, 03, 05, 0a, 01, 05, 01, 05, 06, 01, cd, 01, 09, 00, 0a, 03, 01, 0d, 00, 15, 01, 01, 11, 01, 1b, 05, 01, 1e, 00, 25, 0a, 00, 2f, 00, 33, 03, 02, 09, 00, 0a]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 3
|
||||
@ -138,7 +138,7 @@ Number of expressions: 3
|
||||
- expression 1 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
- expression 2 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
Number of file 0 mappings: 6
|
||||
- Code(Counter(0)) at (prev + 204, 9) to (start + 0, 10)
|
||||
- Code(Counter(0)) at (prev + 205, 9) to (start + 0, 10)
|
||||
- Code(Expression(0, Add)) at (prev + 1, 13) to (start + 0, 21)
|
||||
= (c1 + (c0 - c1))
|
||||
- Code(Counter(0)) at (prev + 1, 17) to (start + 1, 27)
|
||||
@ -149,14 +149,14 @@ Number of file 0 mappings: 6
|
||||
= (c1 + (c0 - c1))
|
||||
|
||||
Function name: closure::main::{closure#18}
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 18, 0d, 02, 1c, 05, 02, 1d, 02, 12, 02, 02, 12, 00, 13, 07, 01, 11, 01, 0e]
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 19, 0d, 02, 1c, 05, 02, 1d, 02, 12, 02, 02, 12, 00, 13, 07, 01, 11, 01, 0e]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 24, 13) to (start + 2, 28)
|
||||
- Code(Counter(0)) at (prev + 25, 13) to (start + 2, 28)
|
||||
- Code(Counter(1)) at (prev + 2, 29) to (start + 2, 18)
|
||||
- Code(Expression(0, Sub)) at (prev + 2, 18) to (start + 0, 19)
|
||||
= (c0 - c1)
|
||||
@ -164,14 +164,14 @@ Number of file 0 mappings: 4
|
||||
= (c1 + (c0 - c1))
|
||||
|
||||
Function name: closure::main::{closure#19}
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 42, 0d, 02, 1c, 05, 02, 1d, 02, 12, 02, 02, 12, 00, 13, 07, 01, 11, 01, 0e]
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 43, 0d, 02, 1c, 05, 02, 1d, 02, 12, 02, 02, 12, 00, 13, 07, 01, 11, 01, 0e]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 66, 13) to (start + 2, 28)
|
||||
- Code(Counter(0)) at (prev + 67, 13) to (start + 2, 28)
|
||||
- Code(Counter(1)) at (prev + 2, 29) to (start + 2, 18)
|
||||
- Code(Expression(0, Sub)) at (prev + 2, 18) to (start + 0, 19)
|
||||
= (c0 - c1)
|
||||
@ -179,14 +179,14 @@ Number of file 0 mappings: 4
|
||||
= (c1 + (c0 - c1))
|
||||
|
||||
Function name: closure::main::{closure#1}
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 51, 05, 02, 14, 05, 02, 15, 02, 0a, 02, 02, 0a, 00, 0b, 07, 01, 09, 01, 06]
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 52, 05, 02, 14, 05, 02, 15, 02, 0a, 02, 02, 0a, 00, 0b, 07, 01, 09, 01, 06]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 81, 5) to (start + 2, 20)
|
||||
- Code(Counter(0)) at (prev + 82, 5) to (start + 2, 20)
|
||||
- Code(Counter(1)) at (prev + 2, 21) to (start + 2, 10)
|
||||
- Code(Expression(0, Sub)) at (prev + 2, 10) to (start + 0, 11)
|
||||
= (c0 - c1)
|
||||
@ -194,14 +194,14 @@ Number of file 0 mappings: 4
|
||||
= (c1 + (c0 - c1))
|
||||
|
||||
Function name: closure::main::{closure#2}
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 67, 05, 02, 14, 05, 02, 15, 02, 0a, 02, 02, 0a, 00, 0b, 07, 01, 09, 01, 06]
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 68, 05, 02, 14, 05, 02, 15, 02, 0a, 02, 02, 0a, 00, 0b, 07, 01, 09, 01, 06]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 103, 5) to (start + 2, 20)
|
||||
- Code(Counter(0)) at (prev + 104, 5) to (start + 2, 20)
|
||||
- Code(Counter(1)) at (prev + 2, 21) to (start + 2, 10)
|
||||
- Code(Expression(0, Sub)) at (prev + 2, 10) to (start + 0, 11)
|
||||
= (c0 - c1)
|
||||
@ -209,61 +209,61 @@ Number of file 0 mappings: 4
|
||||
= (c1 + (c0 - c1))
|
||||
|
||||
Function name: closure::main::{closure#3} (unused)
|
||||
Raw bytes (25): 0x[01, 01, 00, 04, 00, 80, 01, 05, 01, 14, 00, 01, 15, 02, 0a, 00, 02, 0a, 00, 0b, 00, 01, 09, 01, 06]
|
||||
Raw bytes (25): 0x[01, 01, 00, 04, 00, 81, 01, 05, 01, 14, 00, 01, 15, 02, 0a, 00, 02, 0a, 00, 0b, 00, 01, 09, 01, 06]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Zero) at (prev + 128, 5) to (start + 1, 20)
|
||||
- Code(Zero) at (prev + 129, 5) to (start + 1, 20)
|
||||
- Code(Zero) at (prev + 1, 21) to (start + 2, 10)
|
||||
- Code(Zero) at (prev + 2, 10) to (start + 0, 11)
|
||||
- Code(Zero) at (prev + 1, 9) to (start + 1, 6)
|
||||
|
||||
Function name: closure::main::{closure#4} (unused)
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 00, 88, 01, 35, 00, 43]
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 00, 89, 01, 35, 00, 43]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Zero) at (prev + 136, 53) to (start + 0, 67)
|
||||
- Code(Zero) at (prev + 137, 53) to (start + 0, 67)
|
||||
|
||||
Function name: closure::main::{closure#5}
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 01, 8b, 01, 3d, 00, 4f]
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 01, 8c, 01, 3d, 00, 4f]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 139, 61) to (start + 0, 79)
|
||||
- Code(Counter(0)) at (prev + 140, 61) to (start + 0, 79)
|
||||
|
||||
Function name: closure::main::{closure#6}
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 01, 8c, 01, 41, 00, 57]
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 01, 8d, 01, 41, 00, 57]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 140, 65) to (start + 0, 87)
|
||||
- Code(Counter(0)) at (prev + 141, 65) to (start + 0, 87)
|
||||
|
||||
Function name: closure::main::{closure#7} (unused)
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 00, 8d, 01, 3b, 00, 51]
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 00, 8e, 01, 3b, 00, 51]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Zero) at (prev + 141, 59) to (start + 0, 81)
|
||||
- Code(Zero) at (prev + 142, 59) to (start + 0, 81)
|
||||
|
||||
Function name: closure::main::{closure#8} (unused)
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 00, 92, 01, 3b, 00, 55]
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 00, 93, 01, 3b, 00, 55]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Zero) at (prev + 146, 59) to (start + 0, 85)
|
||||
- Code(Zero) at (prev + 147, 59) to (start + 0, 85)
|
||||
|
||||
Function name: closure::main::{closure#9} (unused)
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 00, 94, 01, 38, 02, 06]
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 00, 95, 01, 38, 02, 06]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Zero) at (prev + 148, 56) to (start + 2, 6)
|
||||
- Code(Zero) at (prev + 149, 56) to (start + 2, 6)
|
||||
|
||||
|
@ -5,6 +5,7 @@
|
||||
LL| |// `rustc_middle/mir/mono.rs`, but those hacks were later cleaned up by
|
||||
LL| |// <https://github.com/rust-lang/rust/pull/83666>.
|
||||
LL| |
|
||||
LL| |#[rustfmt::skip]
|
||||
LL| 1|fn main() {
|
||||
LL| 1| // Initialize test constants in a way that cannot be determined at compile time, to ensure
|
||||
LL| 1| // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from
|
||||
|
@ -5,6 +5,7 @@
|
||||
// `rustc_middle/mir/mono.rs`, but those hacks were later cleaned up by
|
||||
// <https://github.com/rust-lang/rust/pull/83666>.
|
||||
|
||||
#[rustfmt::skip]
|
||||
fn main() {
|
||||
// Initialize test constants in a way that cannot be determined at compile time, to ensure
|
||||
// rustc and LLVM cannot optimize out statements (or coverage counters) downstream from
|
||||
|
@ -1,5 +1,5 @@
|
||||
Function name: closure_bug::main
|
||||
Raw bytes (201): 0x[01, 01, 26, 01, 05, 05, 02, 05, 02, 97, 01, 09, 05, 02, 09, 92, 01, 97, 01, 09, 05, 02, 09, 92, 01, 97, 01, 09, 05, 02, 8f, 01, 0d, 09, 92, 01, 97, 01, 09, 05, 02, 0d, 8a, 01, 8f, 01, 0d, 09, 92, 01, 97, 01, 09, 05, 02, 0d, 8a, 01, 8f, 01, 0d, 09, 92, 01, 97, 01, 09, 05, 02, 87, 01, 11, 0d, 8a, 01, 8f, 01, 0d, 09, 92, 01, 97, 01, 09, 05, 02, 11, 82, 01, 87, 01, 11, 0d, 8a, 01, 8f, 01, 0d, 09, 92, 01, 97, 01, 09, 05, 02, 11, 01, 06, 01, 03, 0a, 01, 09, 05, 01, 0e, 05, 01, 0f, 00, 17, 02, 00, 17, 00, 18, 97, 01, 02, 09, 00, 0a, 97, 01, 06, 05, 01, 0e, 09, 01, 0f, 00, 17, 92, 01, 00, 17, 00, 18, 8f, 01, 02, 09, 00, 0a, 8f, 01, 06, 05, 01, 0e, 0d, 01, 0f, 00, 17, 8a, 01, 00, 17, 00, 18, 87, 01, 02, 09, 00, 0a, 87, 01, 06, 05, 01, 0e, 11, 01, 0f, 00, 17, 82, 01, 00, 17, 00, 18, 7f, 01, 01, 00, 02]
|
||||
Raw bytes (201): 0x[01, 01, 26, 01, 05, 05, 02, 05, 02, 97, 01, 09, 05, 02, 09, 92, 01, 97, 01, 09, 05, 02, 09, 92, 01, 97, 01, 09, 05, 02, 8f, 01, 0d, 09, 92, 01, 97, 01, 09, 05, 02, 0d, 8a, 01, 8f, 01, 0d, 09, 92, 01, 97, 01, 09, 05, 02, 0d, 8a, 01, 8f, 01, 0d, 09, 92, 01, 97, 01, 09, 05, 02, 87, 01, 11, 0d, 8a, 01, 8f, 01, 0d, 09, 92, 01, 97, 01, 09, 05, 02, 11, 82, 01, 87, 01, 11, 0d, 8a, 01, 8f, 01, 0d, 09, 92, 01, 97, 01, 09, 05, 02, 11, 01, 07, 01, 03, 0a, 01, 09, 05, 01, 0e, 05, 01, 0f, 00, 17, 02, 00, 17, 00, 18, 97, 01, 02, 09, 00, 0a, 97, 01, 06, 05, 01, 0e, 09, 01, 0f, 00, 17, 92, 01, 00, 17, 00, 18, 8f, 01, 02, 09, 00, 0a, 8f, 01, 06, 05, 01, 0e, 0d, 01, 0f, 00, 17, 8a, 01, 00, 17, 00, 18, 87, 01, 02, 09, 00, 0a, 87, 01, 06, 05, 01, 0e, 11, 01, 0f, 00, 17, 82, 01, 00, 17, 00, 18, 7f, 01, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 38
|
||||
@ -42,7 +42,7 @@ Number of expressions: 38
|
||||
- expression 36 operands: lhs = Expression(37, Add), rhs = Counter(2)
|
||||
- expression 37 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 17
|
||||
- Code(Counter(0)) at (prev + 6, 1) to (start + 3, 10)
|
||||
- Code(Counter(0)) at (prev + 7, 1) to (start + 3, 10)
|
||||
- Code(Counter(0)) at (prev + 9, 5) to (start + 1, 14)
|
||||
- Code(Counter(1)) at (prev + 1, 15) to (start + 0, 23)
|
||||
- Code(Expression(0, Sub)) at (prev + 0, 23) to (start + 0, 24)
|
||||
@ -72,14 +72,14 @@ Number of file 0 mappings: 17
|
||||
= (c4 + ((c3 + ((c2 + ((c1 + (c0 - c1)) - c2)) - c3)) - c4))
|
||||
|
||||
Function name: closure_bug::main::{closure#0}
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 0d, 09, 00, 12, 05, 00, 15, 00, 19, 02, 00, 23, 00, 28, 07, 00, 29, 00, 2a]
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 0e, 09, 00, 12, 05, 00, 15, 00, 19, 02, 00, 23, 00, 28, 07, 00, 29, 00, 2a]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 13, 9) to (start + 0, 18)
|
||||
- Code(Counter(0)) at (prev + 14, 9) to (start + 0, 18)
|
||||
- Code(Counter(1)) at (prev + 0, 21) to (start + 0, 25)
|
||||
- Code(Expression(0, Sub)) at (prev + 0, 35) to (start + 0, 40)
|
||||
= (c0 - c1)
|
||||
@ -87,14 +87,14 @@ Number of file 0 mappings: 4
|
||||
= (c1 + (c0 - c1))
|
||||
|
||||
Function name: closure_bug::main::{closure#1}
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 16, 09, 00, 12, 05, 00, 15, 00, 19, 02, 00, 23, 00, 28, 07, 00, 29, 00, 2a]
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 17, 09, 00, 12, 05, 00, 15, 00, 19, 02, 00, 23, 00, 28, 07, 00, 29, 00, 2a]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 22, 9) to (start + 0, 18)
|
||||
- Code(Counter(0)) at (prev + 23, 9) to (start + 0, 18)
|
||||
- Code(Counter(1)) at (prev + 0, 21) to (start + 0, 25)
|
||||
- Code(Expression(0, Sub)) at (prev + 0, 35) to (start + 0, 40)
|
||||
= (c0 - c1)
|
||||
@ -102,14 +102,14 @@ Number of file 0 mappings: 4
|
||||
= (c1 + (c0 - c1))
|
||||
|
||||
Function name: closure_bug::main::{closure#2}
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 1f, 09, 00, 12, 05, 00, 15, 00, 19, 02, 00, 23, 00, 28, 07, 00, 29, 00, 2a]
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 20, 09, 00, 12, 05, 00, 15, 00, 19, 02, 00, 23, 00, 28, 07, 00, 29, 00, 2a]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 31, 9) to (start + 0, 18)
|
||||
- Code(Counter(0)) at (prev + 32, 9) to (start + 0, 18)
|
||||
- Code(Counter(1)) at (prev + 0, 21) to (start + 0, 25)
|
||||
- Code(Expression(0, Sub)) at (prev + 0, 35) to (start + 0, 40)
|
||||
= (c0 - c1)
|
||||
@ -117,14 +117,14 @@ Number of file 0 mappings: 4
|
||||
= (c1 + (c0 - c1))
|
||||
|
||||
Function name: closure_bug::main::{closure#3}
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 28, 09, 00, 12, 05, 00, 15, 00, 19, 02, 00, 23, 00, 28, 07, 00, 29, 00, 2a]
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 29, 09, 00, 12, 05, 00, 15, 00, 19, 02, 00, 23, 00, 28, 07, 00, 29, 00, 2a]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 40, 9) to (start + 0, 18)
|
||||
- Code(Counter(0)) at (prev + 41, 9) to (start + 0, 18)
|
||||
- Code(Counter(1)) at (prev + 0, 21) to (start + 0, 25)
|
||||
- Code(Expression(0, Sub)) at (prev + 0, 35) to (start + 0, 40)
|
||||
= (c0 - c1)
|
||||
|
@ -3,6 +3,7 @@
|
||||
LL| |// the coverage report. However, an unstable sort was causing them to be treated
|
||||
LL| |// inconsistently when preparing coverage spans.
|
||||
LL| |
|
||||
LL| |#[rustfmt::skip]
|
||||
LL| 1|fn main() {
|
||||
LL| 1| let truthy = std::env::args().len() == 1;
|
||||
LL| 1|
|
||||
|
@ -3,6 +3,7 @@
|
||||
// the coverage report. However, an unstable sort was causing them to be treated
|
||||
// inconsistently when preparing coverage spans.
|
||||
|
||||
#[rustfmt::skip]
|
||||
fn main() {
|
||||
let truthy = std::env::args().len() == 1;
|
||||
|
||||
|
@ -1,20 +1,20 @@
|
||||
Function name: closure_macro::load_configuration_files
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 1d, 01, 02, 02]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 1e, 01, 02, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 29, 1) to (start + 2, 2)
|
||||
- Code(Counter(0)) at (prev + 30, 1) to (start + 2, 2)
|
||||
|
||||
Function name: closure_macro::main
|
||||
Raw bytes (43): 0x[01, 01, 02, 01, 05, 05, 02, 07, 01, 21, 01, 01, 21, 02, 02, 09, 00, 0f, 05, 00, 12, 00, 13, 02, 00, 12, 00, 13, 05, 00, 54, 00, 55, 02, 02, 09, 02, 0b, 07, 03, 01, 00, 02]
|
||||
Raw bytes (43): 0x[01, 01, 02, 01, 05, 05, 02, 07, 01, 22, 01, 01, 21, 02, 02, 09, 00, 0f, 05, 00, 12, 00, 13, 02, 00, 12, 00, 13, 05, 00, 54, 00, 55, 02, 02, 09, 02, 0b, 07, 03, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 7
|
||||
- Code(Counter(0)) at (prev + 33, 1) to (start + 1, 33)
|
||||
- Code(Counter(0)) at (prev + 34, 1) to (start + 1, 33)
|
||||
- Code(Expression(0, Sub)) at (prev + 2, 9) to (start + 0, 15)
|
||||
= (c0 - c1)
|
||||
- Code(Counter(1)) at (prev + 0, 18) to (start + 0, 19)
|
||||
@ -27,10 +27,10 @@ Number of file 0 mappings: 7
|
||||
= (c1 + (c0 - c1))
|
||||
|
||||
Function name: closure_macro::main::{closure#0}
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 23, 12, 00, 54]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 24, 12, 00, 54]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 35, 18) to (start + 0, 84)
|
||||
- Code(Counter(0)) at (prev + 36, 18) to (start + 0, 84)
|
||||
|
||||
|
@ -14,7 +14,8 @@
|
||||
LL| |
|
||||
LL| |macro_rules! on_error {
|
||||
LL| | ($value:expr, $error_message:expr) => {
|
||||
LL| | $value.or_else(|e| { // FIXME(85000): no coverage in closure macros
|
||||
LL| | $value.or_else(|e| {
|
||||
LL| | // FIXME(85000): no coverage in closure macros
|
||||
LL| | let message = format!($error_message, e);
|
||||
LL| | if message.len() > 0 {
|
||||
LL| | println!("{}", message);
|
||||
|
@ -14,7 +14,8 @@ macro_rules! bail {
|
||||
|
||||
macro_rules! on_error {
|
||||
($value:expr, $error_message:expr) => {
|
||||
$value.or_else(|e| { // FIXME(85000): no coverage in closure macros
|
||||
$value.or_else(|e| {
|
||||
// FIXME(85000): no coverage in closure macros
|
||||
let message = format!($error_message, e);
|
||||
if message.len() > 0 {
|
||||
println!("{}", message);
|
||||
|
@ -1,28 +1,28 @@
|
||||
Function name: closure_macro_async::load_configuration_files
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 1e, 01, 02, 02]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 1f, 01, 02, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 30, 1) to (start + 2, 2)
|
||||
- Code(Counter(0)) at (prev + 31, 1) to (start + 2, 2)
|
||||
|
||||
Function name: closure_macro_async::test
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 22, 01, 00, 2b]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 23, 01, 00, 2b]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 34, 1) to (start + 0, 43)
|
||||
- Code(Counter(0)) at (prev + 35, 1) to (start + 0, 43)
|
||||
|
||||
Function name: closure_macro_async::test::{closure#0}
|
||||
Raw bytes (43): 0x[01, 01, 02, 01, 05, 05, 02, 07, 01, 22, 2b, 01, 21, 02, 02, 09, 00, 0f, 05, 00, 12, 00, 13, 02, 00, 12, 00, 13, 05, 00, 54, 00, 55, 02, 02, 09, 02, 0b, 07, 03, 01, 00, 02]
|
||||
Raw bytes (43): 0x[01, 01, 02, 01, 05, 05, 02, 07, 01, 23, 2b, 01, 21, 02, 02, 09, 00, 0f, 05, 00, 12, 00, 13, 02, 00, 12, 00, 13, 05, 00, 54, 00, 55, 02, 02, 09, 02, 0b, 07, 03, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 7
|
||||
- Code(Counter(0)) at (prev + 34, 43) to (start + 1, 33)
|
||||
- Code(Counter(0)) at (prev + 35, 43) to (start + 1, 33)
|
||||
- Code(Expression(0, Sub)) at (prev + 2, 9) to (start + 0, 15)
|
||||
= (c0 - c1)
|
||||
- Code(Counter(1)) at (prev + 0, 18) to (start + 0, 19)
|
||||
@ -35,10 +35,10 @@ Number of file 0 mappings: 7
|
||||
= (c1 + (c0 - c1))
|
||||
|
||||
Function name: closure_macro_async::test::{closure#0}::{closure#0}
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 24, 12, 00, 54]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 25, 12, 00, 54]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 36, 18) to (start + 0, 84)
|
||||
- Code(Counter(0)) at (prev + 37, 18) to (start + 0, 84)
|
||||
|
||||
|
@ -15,7 +15,8 @@
|
||||
LL| |
|
||||
LL| |macro_rules! on_error {
|
||||
LL| | ($value:expr, $error_message:expr) => {
|
||||
LL| | $value.or_else(|e| { // FIXME(85000): no coverage in closure macros
|
||||
LL| | $value.or_else(|e| {
|
||||
LL| | // FIXME(85000): no coverage in closure macros
|
||||
LL| | let message = format!($error_message, e);
|
||||
LL| | if message.len() > 0 {
|
||||
LL| | println!("{}", message);
|
||||
|
@ -15,7 +15,8 @@ macro_rules! bail {
|
||||
|
||||
macro_rules! on_error {
|
||||
($value:expr, $error_message:expr) => {
|
||||
$value.or_else(|e| { // FIXME(85000): no coverage in closure macros
|
||||
$value.or_else(|e| {
|
||||
// FIXME(85000): no coverage in closure macros
|
||||
let message = format!($error_message, e);
|
||||
if message.len() > 0 {
|
||||
println!("{}", message);
|
||||
|
@ -1,5 +1,5 @@
|
||||
Function name: conditions::main
|
||||
Raw bytes (784): 0x[01, 01, 8e, 01, 09, 33, 37, 41, 3b, 3d, 35, 39, 05, 00, b7, 04, 09, 05, 00, 0d, 35, 26, 39, 0d, 35, 3b, 3d, 35, 39, 37, 41, 3b, 3d, 35, 39, b2, 04, 0d, b7, 04, 09, 05, 00, 45, 00, 83, 01, 49, 45, 00, 7e, 31, 83, 01, 49, 45, 00, 7a, 4d, 7e, 31, 83, 01, 49, 45, 00, 76, 51, 7a, 4d, 7e, 31, 83, 01, 49, 45, 00, a7, 01, 55, 4d, 51, a3, 01, 59, a7, 01, 55, 4d, 51, 49, 9f, 01, a3, 01, 59, a7, 01, 55, 4d, 51, 61, 00, e3, 01, 65, 61, 00, de, 01, 2d, e3, 01, 65, 61, 00, da, 01, 69, de, 01, 2d, e3, 01, 65, 61, 00, d6, 01, 6d, da, 01, 69, de, 01, 2d, e3, 01, 65, 61, 00, 8b, 02, 71, 69, 6d, 87, 02, 75, 8b, 02, 71, 69, 6d, ff, 01, 00, 65, 83, 02, 87, 02, 75, 8b, 02, 71, 69, 6d, 7d, eb, 03, ef, 03, 8d, 01, f3, 03, 89, 01, 81, 01, 85, 01, 79, 00, d7, 02, 7d, 79, 00, d2, 02, 29, d7, 02, 7d, 79, 00, ce, 02, 81, 01, d2, 02, 29, d7, 02, 7d, 79, 00, ca, 02, 85, 01, ce, 02, 81, 01, d2, 02, 29, d7, 02, 7d, 79, 00, f3, 03, 89, 01, 81, 01, 85, 01, ef, 03, 8d, 01, f3, 03, 89, 01, 81, 01, 85, 01, 11, 93, 04, 97, 04, 21, 9b, 04, 1d, 15, 19, 7d, eb, 03, ef, 03, 8d, 01, f3, 03, 89, 01, 81, 01, 85, 01, e7, 03, 11, 7d, eb, 03, ef, 03, 8d, 01, f3, 03, 89, 01, 81, 01, 85, 01, e2, 03, 25, e7, 03, 11, 7d, eb, 03, ef, 03, 8d, 01, f3, 03, 89, 01, 81, 01, 85, 01, de, 03, 15, e2, 03, 25, e7, 03, 11, 7d, eb, 03, ef, 03, 8d, 01, f3, 03, 89, 01, 81, 01, 85, 01, da, 03, 19, de, 03, 15, e2, 03, 25, e7, 03, 11, 7d, eb, 03, ef, 03, 8d, 01, f3, 03, 89, 01, 81, 01, 85, 01, 9b, 04, 1d, 15, 19, 97, 04, 21, 9b, 04, 1d, 15, 19, 8f, 04, 9f, 04, 11, 93, 04, 97, 04, 21, 9b, 04, 1d, 15, 19, a3, 04, ae, 04, a7, 04, 31, ab, 04, 2d, 25, 29, b2, 04, 0d, b7, 04, 09, 05, 00, 44, 01, 03, 01, 02, 0c, 05, 02, 0d, 02, 06, 00, 02, 06, 00, 07, 03, 03, 09, 00, 0a, b7, 04, 00, 10, 00, 1d, 09, 01, 09, 01, 0a, b2, 04, 02, 0f, 00, 1c, 0d, 01, 0c, 00, 19, 26, 00, 1d, 00, 2a, 22, 00, 2e, 00, 3c, 37, 00, 3d, 02, 0a, 41, 02, 0a, 00, 0b, 33, 01, 09, 01, 12, ae, 04, 03, 09, 00, 0f, 03, 03, 09, 01, 0c, 45, 01, 0d, 02, 06, 00, 02, 06, 00, 07, 83, 01, 02, 08, 00, 15, 49, 00, 16, 02, 06, 7e, 02, 0f, 00, 1c, 7a, 01, 0c, 00, 19, 76, 00, 1d, 00, 2a, 72, 00, 2e, 00, 3c, a3, 01, 00, 3d, 02, 0a, 59, 02, 0a, 00, 0b, 9f, 01, 01, 09, 00, 17, 31, 02, 09, 00, 0f, 9b, 01, 03, 08, 00, 0c, 5d, 01, 0d, 01, 10, 61, 01, 11, 02, 0a, 00, 02, 0a, 00, 0b, e3, 01, 02, 0c, 00, 19, 65, 00, 1a, 02, 0a, de, 01, 03, 11, 00, 1e, da, 01, 01, 10, 00, 1d, d6, 01, 00, 21, 00, 2e, d2, 01, 00, 32, 00, 40, 87, 02, 00, 41, 02, 0e, 75, 02, 0e, 00, 0f, 83, 02, 01, 0d, 00, 1b, 2d, 02, 0d, 00, 13, 00, 02, 06, 00, 07, fb, 01, 02, 09, 01, 0c, 79, 01, 0d, 02, 06, 00, 02, 06, 00, 07, e7, 03, 02, 09, 00, 0a, d7, 02, 00, 10, 00, 1d, 7d, 00, 1e, 02, 06, d2, 02, 02, 0f, 00, 1c, ce, 02, 01, 0c, 00, 19, ca, 02, 00, 1d, 00, 2a, c6, 02, 00, 2e, 00, 3c, ef, 03, 00, 3d, 02, 0a, 8d, 01, 02, 0a, 00, 0b, eb, 03, 01, 09, 00, 17, 29, 02, 0d, 02, 0f, 8f, 04, 05, 09, 00, 0a, e7, 03, 00, 10, 00, 1d, 11, 00, 1e, 02, 06, e2, 03, 02, 0f, 00, 1c, de, 03, 01, 0c, 00, 19, da, 03, 00, 1d, 00, 2a, d6, 03, 00, 2e, 00, 3c, 97, 04, 00, 3d, 02, 0a, 21, 02, 0a, 00, 0b, 93, 04, 01, 09, 00, 17, 25, 02, 09, 00, 0f, 8b, 04, 02, 01, 00, 02]
|
||||
Raw bytes (784): 0x[01, 01, 8e, 01, 09, 33, 37, 41, 3b, 3d, 35, 39, 05, 00, b7, 04, 09, 05, 00, 0d, 35, 26, 39, 0d, 35, 3b, 3d, 35, 39, 37, 41, 3b, 3d, 35, 39, b2, 04, 0d, b7, 04, 09, 05, 00, 45, 00, 83, 01, 49, 45, 00, 7e, 31, 83, 01, 49, 45, 00, 7a, 4d, 7e, 31, 83, 01, 49, 45, 00, 76, 51, 7a, 4d, 7e, 31, 83, 01, 49, 45, 00, a7, 01, 55, 4d, 51, a3, 01, 59, a7, 01, 55, 4d, 51, 49, 9f, 01, a3, 01, 59, a7, 01, 55, 4d, 51, 61, 00, e3, 01, 65, 61, 00, de, 01, 2d, e3, 01, 65, 61, 00, da, 01, 69, de, 01, 2d, e3, 01, 65, 61, 00, d6, 01, 6d, da, 01, 69, de, 01, 2d, e3, 01, 65, 61, 00, 8b, 02, 71, 69, 6d, 87, 02, 75, 8b, 02, 71, 69, 6d, ff, 01, 00, 65, 83, 02, 87, 02, 75, 8b, 02, 71, 69, 6d, 7d, eb, 03, ef, 03, 8d, 01, f3, 03, 89, 01, 81, 01, 85, 01, 79, 00, d7, 02, 7d, 79, 00, d2, 02, 29, d7, 02, 7d, 79, 00, ce, 02, 81, 01, d2, 02, 29, d7, 02, 7d, 79, 00, ca, 02, 85, 01, ce, 02, 81, 01, d2, 02, 29, d7, 02, 7d, 79, 00, f3, 03, 89, 01, 81, 01, 85, 01, ef, 03, 8d, 01, f3, 03, 89, 01, 81, 01, 85, 01, 11, 93, 04, 97, 04, 21, 9b, 04, 1d, 15, 19, 7d, eb, 03, ef, 03, 8d, 01, f3, 03, 89, 01, 81, 01, 85, 01, e7, 03, 11, 7d, eb, 03, ef, 03, 8d, 01, f3, 03, 89, 01, 81, 01, 85, 01, e2, 03, 25, e7, 03, 11, 7d, eb, 03, ef, 03, 8d, 01, f3, 03, 89, 01, 81, 01, 85, 01, de, 03, 15, e2, 03, 25, e7, 03, 11, 7d, eb, 03, ef, 03, 8d, 01, f3, 03, 89, 01, 81, 01, 85, 01, da, 03, 19, de, 03, 15, e2, 03, 25, e7, 03, 11, 7d, eb, 03, ef, 03, 8d, 01, f3, 03, 89, 01, 81, 01, 85, 01, 9b, 04, 1d, 15, 19, 97, 04, 21, 9b, 04, 1d, 15, 19, 8f, 04, 9f, 04, 11, 93, 04, 97, 04, 21, 9b, 04, 1d, 15, 19, a3, 04, ae, 04, a7, 04, 31, ab, 04, 2d, 25, 29, b2, 04, 0d, b7, 04, 09, 05, 00, 44, 01, 03, 01, 02, 0c, 05, 02, 0d, 02, 06, 00, 02, 06, 00, 07, 03, 03, 09, 00, 0a, b7, 04, 00, 10, 00, 1d, 09, 01, 09, 01, 0a, b2, 04, 02, 0f, 00, 1c, 0d, 01, 0c, 00, 19, 26, 00, 1d, 00, 2a, 22, 00, 2e, 00, 3c, 37, 00, 3d, 02, 0a, 41, 02, 0a, 00, 0b, 33, 01, 09, 01, 12, ae, 04, 03, 09, 00, 0f, 03, 03, 09, 01, 0c, 45, 01, 0d, 02, 06, 00, 02, 06, 00, 07, 83, 01, 02, 08, 00, 15, 49, 00, 16, 02, 06, 7e, 02, 0f, 00, 1c, 7a, 01, 0c, 00, 19, 76, 00, 1d, 00, 2a, 72, 00, 2e, 00, 3c, a3, 01, 00, 3d, 02, 0a, 59, 02, 0a, 00, 0b, 9f, 01, 01, 09, 00, 17, 31, 02, 09, 00, 0f, 9b, 01, 03, 08, 00, 0c, 5d, 01, 0d, 01, 10, 61, 01, 11, 02, 0a, 00, 02, 0a, 00, 0b, e3, 01, 02, 0c, 00, 19, 65, 00, 1a, 02, 0a, de, 01, 04, 11, 00, 1e, da, 01, 01, 10, 00, 1d, d6, 01, 00, 21, 00, 2e, d2, 01, 00, 32, 00, 40, 87, 02, 00, 41, 02, 0e, 75, 02, 0e, 00, 0f, 83, 02, 01, 0d, 00, 1b, 2d, 02, 0d, 00, 13, 00, 02, 06, 00, 07, fb, 01, 02, 09, 01, 0c, 79, 01, 0d, 02, 06, 00, 02, 06, 00, 07, e7, 03, 02, 09, 00, 0a, d7, 02, 00, 10, 00, 1d, 7d, 00, 1e, 02, 06, d2, 02, 02, 0f, 00, 1c, ce, 02, 01, 0c, 00, 19, ca, 02, 00, 1d, 00, 2a, c6, 02, 00, 2e, 00, 3c, ef, 03, 00, 3d, 02, 0a, 8d, 01, 02, 0a, 00, 0b, eb, 03, 01, 09, 00, 17, 29, 02, 0d, 02, 0f, 8f, 04, 05, 09, 00, 0a, e7, 03, 00, 10, 00, 1d, 11, 00, 1e, 02, 06, e2, 03, 02, 0f, 00, 1c, de, 03, 01, 0c, 00, 19, da, 03, 00, 1d, 00, 2a, d6, 03, 00, 2e, 00, 3c, 97, 04, 00, 3d, 02, 0a, 21, 02, 0a, 00, 0b, 93, 04, 01, 09, 00, 17, 25, 02, 09, 00, 0f, 8b, 04, 02, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 142
|
||||
@ -197,7 +197,7 @@ Number of file 0 mappings: 68
|
||||
- Code(Expression(56, Add)) at (prev + 2, 12) to (start + 0, 25)
|
||||
= (c24 + Zero)
|
||||
- Code(Counter(25)) at (prev + 0, 26) to (start + 2, 10)
|
||||
- Code(Expression(55, Sub)) at (prev + 3, 17) to (start + 0, 30)
|
||||
- Code(Expression(55, Sub)) at (prev + 4, 17) to (start + 0, 30)
|
||||
= ((c24 + Zero) - c25)
|
||||
- Code(Expression(54, Sub)) at (prev + 1, 16) to (start + 0, 29)
|
||||
= (((c24 + Zero) - c25) - c11)
|
||||
|
@ -49,6 +49,7 @@
|
||||
LL| 1| if countdown > 7 {
|
||||
LL| 1| countdown -= 4;
|
||||
LL| 1| }
|
||||
LL| | //
|
||||
LL| 0| else if countdown > 2 {
|
||||
LL| 0| if countdown < 1 || countdown > 5 || countdown != 9 {
|
||||
LL| 0| countdown = 0;
|
||||
|
@ -45,6 +45,7 @@ fn main() {
|
||||
if countdown > 7 {
|
||||
countdown -= 4;
|
||||
}
|
||||
//
|
||||
else if countdown > 2 {
|
||||
if countdown < 1 || countdown > 5 || countdown != 9 {
|
||||
countdown = 0;
|
||||
|
@ -1,5 +1,5 @@
|
||||
Function name: coroutine::get_u32
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 0b, 01, 01, 0b, 05, 01, 0e, 00, 13, 02, 00, 1d, 00, 3c, 07, 01, 01, 00, 02]
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 0b, 01, 01, 0b, 05, 02, 09, 00, 0e, 02, 02, 09, 00, 28, 07, 02, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
@ -7,14 +7,14 @@ Number of expressions: 2
|
||||
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 11, 1) to (start + 1, 11)
|
||||
- Code(Counter(1)) at (prev + 1, 14) to (start + 0, 19)
|
||||
- Code(Expression(0, Sub)) at (prev + 0, 29) to (start + 0, 60)
|
||||
- Code(Counter(1)) at (prev + 2, 9) to (start + 0, 14)
|
||||
- Code(Expression(0, Sub)) at (prev + 2, 9) to (start + 0, 40)
|
||||
= (c0 - c1)
|
||||
- Code(Expression(1, Add)) at (prev + 1, 1) to (start + 0, 2)
|
||||
- Code(Expression(1, Add)) at (prev + 2, 1) to (start + 0, 2)
|
||||
= (c1 + (c0 - c1))
|
||||
|
||||
Function name: coroutine::main
|
||||
Raw bytes (65): 0x[01, 01, 08, 07, 0d, 05, 09, 11, 15, 1e, 19, 11, 15, 15, 19, 1e, 19, 11, 15, 09, 01, 0f, 01, 02, 16, 01, 07, 0b, 00, 2e, 11, 01, 2b, 00, 2d, 03, 01, 0e, 00, 35, 11, 02, 0b, 00, 2e, 1e, 01, 22, 00, 27, 1a, 00, 2c, 00, 2e, 17, 01, 0e, 00, 35, 1a, 02, 01, 00, 02]
|
||||
Raw bytes (65): 0x[01, 01, 08, 07, 0d, 05, 09, 11, 15, 1e, 19, 11, 15, 15, 19, 1e, 19, 11, 15, 09, 01, 13, 01, 02, 16, 01, 07, 0b, 00, 2e, 11, 01, 2b, 00, 2d, 03, 01, 0e, 00, 35, 11, 02, 0b, 00, 2e, 1e, 01, 22, 00, 27, 1a, 00, 2c, 00, 2e, 17, 01, 0e, 00, 35, 1a, 02, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 8
|
||||
@ -27,7 +27,7 @@ Number of expressions: 8
|
||||
- expression 6 operands: lhs = Expression(7, Sub), rhs = Counter(6)
|
||||
- expression 7 operands: lhs = Counter(4), rhs = Counter(5)
|
||||
Number of file 0 mappings: 9
|
||||
- Code(Counter(0)) at (prev + 15, 1) to (start + 2, 22)
|
||||
- Code(Counter(0)) at (prev + 19, 1) to (start + 2, 22)
|
||||
- Code(Counter(0)) at (prev + 7, 11) to (start + 0, 46)
|
||||
- Code(Counter(4)) at (prev + 1, 43) to (start + 0, 45)
|
||||
- Code(Expression(0, Add)) at (prev + 1, 14) to (start + 0, 53)
|
||||
@ -43,11 +43,11 @@ Number of file 0 mappings: 9
|
||||
= ((c4 - c5) - c6)
|
||||
|
||||
Function name: coroutine::main::{closure#0}
|
||||
Raw bytes (14): 0x[01, 01, 00, 02, 01, 11, 1c, 01, 1f, 05, 02, 10, 01, 06]
|
||||
Raw bytes (14): 0x[01, 01, 00, 02, 01, 15, 1c, 01, 1f, 05, 02, 10, 01, 06]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 2
|
||||
- Code(Counter(0)) at (prev + 17, 28) to (start + 1, 31)
|
||||
- Code(Counter(0)) at (prev + 21, 28) to (start + 1, 31)
|
||||
- Code(Counter(1)) at (prev + 2, 16) to (start + 1, 6)
|
||||
|
||||
|
@ -9,8 +9,11 @@
|
||||
LL| |// drop all `Counter` `Coverage` statements from a MIR. `simplify.rs` has logic
|
||||
LL| |// to handle this condition, and still report dead block coverage.
|
||||
LL| 1|fn get_u32(val: bool) -> Result<u32, String> {
|
||||
LL| 1| if val { Ok(1) } else { Err(String::from("some error")) }
|
||||
^0
|
||||
LL| 1| if val {
|
||||
LL| 1| Ok(1)
|
||||
LL| | } else {
|
||||
LL| 0| Err(String::from("some error"))
|
||||
LL| | }
|
||||
LL| 1|}
|
||||
LL| |
|
||||
LL| 1|fn main() {
|
||||
|
@ -9,7 +9,11 @@ use std::pin::Pin;
|
||||
// drop all `Counter` `Coverage` statements from a MIR. `simplify.rs` has logic
|
||||
// to handle this condition, and still report dead block coverage.
|
||||
fn get_u32(val: bool) -> Result<u32, String> {
|
||||
if val { Ok(1) } else { Err(String::from("some error")) }
|
||||
if val {
|
||||
Ok(1)
|
||||
} else {
|
||||
Err(String::from("some error"))
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
@ -1,53 +1,53 @@
|
||||
Function name: fn_sig_into_try::a
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 0a, 01, 04, 02]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 0a, 01, 05, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 10, 1) to (start + 4, 2)
|
||||
- Code(Counter(0)) at (prev + 10, 1) to (start + 5, 2)
|
||||
|
||||
Function name: fn_sig_into_try::b
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 00, 00, 02, 04, 01, 10, 01, 02, 0f, 00, 02, 0f, 00, 10, 02, 01, 05, 00, 0c, 07, 01, 01, 00, 02]
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 00, 00, 02, 04, 01, 11, 01, 03, 0f, 00, 03, 0f, 00, 10, 02, 01, 05, 00, 0c, 07, 01, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Zero
|
||||
- expression 1 operands: lhs = Zero, rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 16, 1) to (start + 2, 15)
|
||||
- Code(Zero) at (prev + 2, 15) to (start + 0, 16)
|
||||
- Code(Expression(0, Sub)) at (prev + 1, 5) to (start + 0, 12)
|
||||
= (c0 - Zero)
|
||||
- Code(Expression(1, Add)) at (prev + 1, 1) to (start + 0, 2)
|
||||
= (Zero + (c0 - Zero))
|
||||
|
||||
Function name: fn_sig_into_try::c
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 00, 00, 02, 04, 01, 16, 01, 02, 17, 00, 02, 17, 00, 18, 02, 01, 05, 00, 0c, 07, 01, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Zero
|
||||
- expression 1 operands: lhs = Zero, rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 22, 1) to (start + 2, 23)
|
||||
- Code(Zero) at (prev + 2, 23) to (start + 0, 24)
|
||||
- Code(Expression(0, Sub)) at (prev + 1, 5) to (start + 0, 12)
|
||||
= (c0 - Zero)
|
||||
- Code(Expression(1, Add)) at (prev + 1, 1) to (start + 0, 2)
|
||||
= (Zero + (c0 - Zero))
|
||||
|
||||
Function name: fn_sig_into_try::d
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 00, 00, 02, 04, 01, 1c, 01, 03, 0f, 00, 03, 0f, 00, 10, 02, 01, 05, 00, 0c, 07, 01, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Zero
|
||||
- expression 1 operands: lhs = Zero, rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 28, 1) to (start + 3, 15)
|
||||
- Code(Counter(0)) at (prev + 17, 1) to (start + 3, 15)
|
||||
- Code(Zero) at (prev + 3, 15) to (start + 0, 16)
|
||||
- Code(Expression(0, Sub)) at (prev + 1, 5) to (start + 0, 12)
|
||||
= (c0 - Zero)
|
||||
- Code(Expression(1, Add)) at (prev + 1, 1) to (start + 0, 2)
|
||||
= (Zero + (c0 - Zero))
|
||||
|
||||
Function name: fn_sig_into_try::c
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 00, 00, 02, 04, 01, 18, 01, 03, 17, 00, 03, 17, 00, 18, 02, 01, 05, 00, 0c, 07, 01, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Zero
|
||||
- expression 1 operands: lhs = Zero, rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 24, 1) to (start + 3, 23)
|
||||
- Code(Zero) at (prev + 3, 23) to (start + 0, 24)
|
||||
- Code(Expression(0, Sub)) at (prev + 1, 5) to (start + 0, 12)
|
||||
= (c0 - Zero)
|
||||
- Code(Expression(1, Add)) at (prev + 1, 1) to (start + 0, 2)
|
||||
= (Zero + (c0 - Zero))
|
||||
|
||||
Function name: fn_sig_into_try::d
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 00, 00, 02, 04, 01, 1f, 01, 04, 0f, 00, 04, 0f, 00, 10, 02, 01, 05, 00, 0c, 07, 01, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Zero
|
||||
- expression 1 operands: lhs = Zero, rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 31, 1) to (start + 4, 15)
|
||||
- Code(Zero) at (prev + 4, 15) to (start + 0, 16)
|
||||
- Code(Expression(0, Sub)) at (prev + 1, 5) to (start + 0, 12)
|
||||
= (c0 - Zero)
|
||||
- Code(Expression(1, Add)) at (prev + 1, 1) to (start + 0, 2)
|
||||
= (Zero + (c0 - Zero))
|
||||
|
||||
|
@ -8,12 +8,14 @@
|
||||
LL| |// signature should be handled in the same way.
|
||||
LL| |
|
||||
LL| 1|fn a() -> Option<i32>
|
||||
LL| 1|//
|
||||
LL| 1|{
|
||||
LL| 1| Some(7i32);
|
||||
LL| 1| Some(0)
|
||||
LL| 1|}
|
||||
LL| |
|
||||
LL| 1|fn b() -> Option<i32>
|
||||
LL| 1|//
|
||||
LL| 1|{
|
||||
LL| 1| Some(7i32)?;
|
||||
^0
|
||||
@ -21,6 +23,7 @@
|
||||
LL| 1|}
|
||||
LL| |
|
||||
LL| 1|fn c() -> Option<i32>
|
||||
LL| 1|//
|
||||
LL| 1|{
|
||||
LL| 1| let _ = Some(7i32)?;
|
||||
^0
|
||||
@ -28,6 +31,7 @@
|
||||
LL| 1|}
|
||||
LL| |
|
||||
LL| 1|fn d() -> Option<i32>
|
||||
LL| 1|//
|
||||
LL| 1|{
|
||||
LL| 1| let _: () = ();
|
||||
LL| 1| Some(7i32)?;
|
||||
|
@ -8,24 +8,28 @@
|
||||
// signature should be handled in the same way.
|
||||
|
||||
fn a() -> Option<i32>
|
||||
//
|
||||
{
|
||||
Some(7i32);
|
||||
Some(0)
|
||||
}
|
||||
|
||||
fn b() -> Option<i32>
|
||||
//
|
||||
{
|
||||
Some(7i32)?;
|
||||
Some(0)
|
||||
}
|
||||
|
||||
fn c() -> Option<i32>
|
||||
//
|
||||
{
|
||||
let _ = Some(7i32)?;
|
||||
Some(0)
|
||||
}
|
||||
|
||||
fn d() -> Option<i32>
|
||||
//
|
||||
{
|
||||
let _: () = ();
|
||||
Some(7i32)?;
|
||||
|
@ -1,11 +1,11 @@
|
||||
LL| |#![allow(unused_assignments)]
|
||||
LL| |// failure-status: 1
|
||||
LL| |
|
||||
LL| |struct Firework<T> where T: Copy + std::fmt::Display {
|
||||
LL| |struct Firework<T: Copy + std::fmt::Display> {
|
||||
LL| | strength: T,
|
||||
LL| |}
|
||||
LL| |
|
||||
LL| |impl<T> Firework<T> where T: Copy + std::fmt::Display {
|
||||
LL| |impl<T: Copy + std::fmt::Display> Firework<T> {
|
||||
LL| | #[inline(always)]
|
||||
LL| 3| fn set_strength(&mut self, new_strength: T) {
|
||||
LL| 3| self.strength = new_strength;
|
||||
@ -23,7 +23,7 @@
|
||||
------------------
|
||||
LL| |}
|
||||
LL| |
|
||||
LL| |impl<T> Drop for Firework<T> where T: Copy + std::fmt::Display {
|
||||
LL| |impl<T: Copy + std::fmt::Display> Drop for Firework<T> {
|
||||
LL| | #[inline(always)]
|
||||
LL| 2| fn drop(&mut self) {
|
||||
LL| 2| println!("BOOM times {}!!!", self.strength);
|
||||
|
@ -1,18 +1,18 @@
|
||||
#![allow(unused_assignments)]
|
||||
// failure-status: 1
|
||||
|
||||
struct Firework<T> where T: Copy + std::fmt::Display {
|
||||
struct Firework<T: Copy + std::fmt::Display> {
|
||||
strength: T,
|
||||
}
|
||||
|
||||
impl<T> Firework<T> where T: Copy + std::fmt::Display {
|
||||
impl<T: Copy + std::fmt::Display> Firework<T> {
|
||||
#[inline(always)]
|
||||
fn set_strength(&mut self, new_strength: T) {
|
||||
self.strength = new_strength;
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Drop for Firework<T> where T: Copy + std::fmt::Display {
|
||||
impl<T: Copy + std::fmt::Display> Drop for Firework<T> {
|
||||
#[inline(always)]
|
||||
fn drop(&mut self) {
|
||||
println!("BOOM times {}!!!", self.strength);
|
||||
|
@ -1,12 +1,12 @@
|
||||
Function name: if::main
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 03, 01, 12, 10, 05, 13, 05, 05, 06, 02, 05, 06, 00, 07, 07, 01, 01, 00, 02]
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 04, 01, 12, 10, 05, 13, 05, 05, 06, 02, 05, 06, 00, 07, 07, 01, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 3, 1) to (start + 18, 16)
|
||||
- Code(Counter(0)) at (prev + 4, 1) to (start + 18, 16)
|
||||
- Code(Counter(1)) at (prev + 19, 5) to (start + 5, 6)
|
||||
- Code(Expression(0, Sub)) at (prev + 5, 6) to (start + 0, 7)
|
||||
= (c0 - c1)
|
||||
|
@ -1,5 +1,6 @@
|
||||
LL| |#![allow(unused_assignments, unused_variables)]
|
||||
LL| |
|
||||
LL| |#[rustfmt::skip]
|
||||
LL| 1|fn main() {
|
||||
LL| 1| // Initialize test constants in a way that cannot be determined at compile time, to ensure
|
||||
LL| 1| // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from
|
||||
|
@ -1,5 +1,6 @@
|
||||
#![allow(unused_assignments, unused_variables)]
|
||||
|
||||
#[rustfmt::skip]
|
||||
fn main() {
|
||||
// Initialize test constants in a way that cannot be determined at compile time, to ensure
|
||||
// rustc and LLVM cannot optimize out statements (or coverage counters) downstream from
|
||||
|
@ -1,5 +1,5 @@
|
||||
Function name: if_else::main
|
||||
Raw bytes (53): 0x[01, 01, 07, 01, 05, 05, 02, 1b, 09, 05, 02, 09, 16, 1b, 09, 05, 02, 07, 01, 03, 01, 08, 10, 05, 09, 05, 05, 06, 02, 08, 09, 02, 10, 1b, 06, 09, 00, 10, 09, 01, 05, 05, 06, 16, 07, 05, 05, 06, 13, 06, 01, 00, 02]
|
||||
Raw bytes (53): 0x[01, 01, 07, 01, 05, 05, 02, 1b, 09, 05, 02, 09, 16, 1b, 09, 05, 02, 07, 01, 04, 01, 08, 10, 05, 09, 05, 05, 06, 02, 08, 09, 02, 10, 1b, 06, 09, 00, 10, 09, 01, 05, 05, 06, 16, 07, 05, 05, 06, 13, 06, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 7
|
||||
@ -11,7 +11,7 @@ Number of expressions: 7
|
||||
- expression 5 operands: lhs = Expression(6, Add), rhs = Counter(2)
|
||||
- expression 6 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 7
|
||||
- Code(Counter(0)) at (prev + 3, 1) to (start + 8, 16)
|
||||
- Code(Counter(0)) at (prev + 4, 1) to (start + 8, 16)
|
||||
- Code(Counter(1)) at (prev + 9, 5) to (start + 5, 6)
|
||||
- Code(Expression(0, Sub)) at (prev + 8, 9) to (start + 2, 16)
|
||||
= (c0 - c1)
|
||||
|
@ -1,5 +1,6 @@
|
||||
LL| |#![allow(unused_assignments, unused_variables)]
|
||||
LL| |
|
||||
LL| |#[rustfmt::skip]
|
||||
LL| 1|fn main() {
|
||||
LL| 1| // Initialize test constants in a way that cannot be determined at compile time, to ensure
|
||||
LL| 1| // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from
|
||||
|
@ -1,5 +1,6 @@
|
||||
#![allow(unused_assignments, unused_variables)]
|
||||
|
||||
#[rustfmt::skip]
|
||||
fn main() {
|
||||
// Initialize test constants in a way that cannot be determined at compile time, to ensure
|
||||
// rustc and LLVM cannot optimize out statements (or coverage counters) downstream from
|
||||
|
@ -1,5 +1,5 @@
|
||||
Function name: if_not::if_not
|
||||
Raw bytes (86): 0x[01, 01, 10, 01, 05, 05, 02, 3f, 09, 05, 02, 09, 3a, 3f, 09, 05, 02, 37, 0d, 09, 3a, 3f, 09, 05, 02, 0d, 32, 37, 0d, 09, 3a, 3f, 09, 05, 02, 0a, 01, 04, 01, 03, 0d, 02, 04, 05, 02, 06, 05, 02, 06, 00, 07, 3f, 03, 09, 01, 0d, 3a, 02, 05, 02, 06, 09, 02, 06, 00, 07, 37, 03, 09, 01, 0d, 32, 02, 05, 02, 06, 0d, 02, 0c, 02, 06, 2f, 03, 01, 00, 02]
|
||||
Raw bytes (86): 0x[01, 01, 10, 01, 05, 05, 02, 3f, 09, 05, 02, 09, 3a, 3f, 09, 05, 02, 37, 0d, 09, 3a, 3f, 09, 05, 02, 0d, 32, 37, 0d, 09, 3a, 3f, 09, 05, 02, 0a, 01, 05, 01, 03, 0d, 02, 04, 05, 02, 06, 05, 02, 06, 00, 07, 3f, 03, 09, 01, 0d, 3a, 02, 05, 02, 06, 09, 02, 06, 00, 07, 37, 03, 09, 01, 0d, 32, 02, 05, 02, 06, 0d, 02, 0c, 02, 06, 2f, 03, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 16
|
||||
@ -20,7 +20,7 @@ Number of expressions: 16
|
||||
- expression 14 operands: lhs = Expression(15, Add), rhs = Counter(2)
|
||||
- expression 15 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 10
|
||||
- Code(Counter(0)) at (prev + 4, 1) to (start + 3, 13)
|
||||
- Code(Counter(0)) at (prev + 5, 1) to (start + 3, 13)
|
||||
- Code(Expression(0, Sub)) at (prev + 4, 5) to (start + 2, 6)
|
||||
= (c0 - c1)
|
||||
- Code(Counter(1)) at (prev + 2, 6) to (start + 0, 7)
|
||||
|
@ -1,6 +1,7 @@
|
||||
LL| |#![feature(coverage_attribute)]
|
||||
LL| |// edition: 2021
|
||||
LL| |
|
||||
LL| |#[rustfmt::skip]
|
||||
LL| 12|fn if_not(cond: bool) {
|
||||
LL| 12| if
|
||||
LL| 12| !
|
||||
|
@ -1,6 +1,7 @@
|
||||
#![feature(coverage_attribute)]
|
||||
// edition: 2021
|
||||
|
||||
#[rustfmt::skip]
|
||||
fn if_not(cond: bool) {
|
||||
if
|
||||
!
|
||||
|
@ -1,20 +1,20 @@
|
||||
Function name: inline_dead::dead (unused)
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 00, 19, 01, 02, 02]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 00, 17, 01, 02, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Zero) at (prev + 25, 1) to (start + 2, 2)
|
||||
- Code(Zero) at (prev + 23, 1) to (start + 2, 2)
|
||||
|
||||
Function name: inline_dead::live::<false>
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 00, 00, 02, 04, 01, 10, 01, 01, 09, 00, 02, 09, 00, 0f, 02, 02, 09, 00, 0a, 07, 02, 01, 00, 02]
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 00, 00, 02, 04, 01, 0e, 01, 01, 09, 00, 02, 09, 00, 0f, 02, 02, 09, 00, 0a, 07, 02, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Zero
|
||||
- expression 1 operands: lhs = Zero, rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 16, 1) to (start + 1, 9)
|
||||
- Code(Counter(0)) at (prev + 14, 1) to (start + 1, 9)
|
||||
- Code(Zero) at (prev + 2, 9) to (start + 0, 15)
|
||||
- Code(Expression(0, Sub)) at (prev + 2, 9) to (start + 0, 10)
|
||||
= (c0 - Zero)
|
||||
@ -22,16 +22,16 @@ Number of file 0 mappings: 4
|
||||
= (Zero + (c0 - Zero))
|
||||
|
||||
Function name: inline_dead::main
|
||||
Raw bytes (14): 0x[01, 01, 00, 02, 01, 04, 01, 03, 0d, 01, 07, 06, 02, 02]
|
||||
Raw bytes (14): 0x[01, 01, 00, 02, 01, 04, 01, 03, 0d, 01, 05, 06, 02, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 2
|
||||
- Code(Counter(0)) at (prev + 4, 1) to (start + 3, 13)
|
||||
- Code(Counter(0)) at (prev + 7, 6) to (start + 2, 2)
|
||||
- Code(Counter(0)) at (prev + 5, 6) to (start + 2, 2)
|
||||
|
||||
Function name: inline_dead::main::{closure#0}
|
||||
Raw bytes (23): 0x[01, 01, 02, 00, 06, 01, 00, 03, 01, 07, 17, 01, 16, 00, 02, 0d, 00, 0e, 03, 02, 05, 00, 06]
|
||||
Raw bytes (23): 0x[01, 01, 02, 00, 06, 01, 00, 03, 01, 07, 17, 01, 16, 00, 01, 17, 00, 18, 03, 01, 05, 00, 06]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
@ -39,7 +39,7 @@ Number of expressions: 2
|
||||
- expression 1 operands: lhs = Counter(0), rhs = Zero
|
||||
Number of file 0 mappings: 3
|
||||
- Code(Counter(0)) at (prev + 7, 23) to (start + 1, 22)
|
||||
- Code(Zero) at (prev + 2, 13) to (start + 0, 14)
|
||||
- Code(Expression(0, Add)) at (prev + 2, 5) to (start + 0, 6)
|
||||
- Code(Zero) at (prev + 1, 23) to (start + 0, 24)
|
||||
- Code(Expression(0, Add)) at (prev + 1, 5) to (start + 0, 6)
|
||||
= (Zero + (c0 - Zero))
|
||||
|
||||
|
@ -5,9 +5,8 @@
|
||||
LL| 1| println!("{}", live::<false>());
|
||||
LL| 1|
|
||||
LL| 1| let f = |x: bool| {
|
||||
LL| 1| debug_assert!(
|
||||
LL| 0| x
|
||||
LL| | );
|
||||
LL| 1| debug_assert!(x);
|
||||
^0
|
||||
LL| 1| };
|
||||
LL| 1| f(false);
|
||||
LL| 1|}
|
||||
|
@ -5,9 +5,7 @@ fn main() {
|
||||
println!("{}", live::<false>());
|
||||
|
||||
let f = |x: bool| {
|
||||
debug_assert!(
|
||||
x
|
||||
);
|
||||
debug_assert!(x);
|
||||
};
|
||||
f(false);
|
||||
}
|
||||
|
@ -7,14 +7,14 @@ Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 4, 10) to (start + 0, 19)
|
||||
|
||||
Function name: <issue_84561::Foo as core::fmt::Debug>::fmt
|
||||
Raw bytes (29): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 88, 01, 05, 01, 25, 05, 01, 25, 00, 26, 02, 01, 09, 00, 0f, 07, 01, 05, 00, 06]
|
||||
Raw bytes (29): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 8a, 01, 05, 01, 25, 05, 01, 25, 00, 26, 02, 01, 09, 00, 0f, 07, 01, 05, 00, 06]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 136, 5) to (start + 1, 37)
|
||||
- Code(Counter(0)) at (prev + 138, 5) to (start + 1, 37)
|
||||
- Code(Counter(1)) at (prev + 1, 37) to (start + 0, 38)
|
||||
- Code(Expression(0, Sub)) at (prev + 1, 9) to (start + 0, 15)
|
||||
= (c0 - c1)
|
||||
@ -22,15 +22,15 @@ Number of file 0 mappings: 4
|
||||
= (c1 + (c0 - c1))
|
||||
|
||||
Function name: issue_84561::main
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 01, b2, 01, 01, 04, 02]
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 01, b4, 01, 01, 04, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 178, 1) to (start + 4, 2)
|
||||
- Code(Counter(0)) at (prev + 180, 1) to (start + 4, 2)
|
||||
|
||||
Function name: issue_84561::test1
|
||||
Raw bytes (78): 0x[01, 01, 0e, 05, 06, 01, 05, 09, 36, 03, 09, 0d, 2e, 33, 0d, 09, 36, 03, 09, 11, 26, 2b, 11, 0d, 2e, 33, 0d, 09, 36, 03, 09, 09, 01, 98, 01, 01, 01, 0b, 05, 01, 0c, 00, 1e, 03, 01, 05, 00, 0b, 09, 00, 0c, 00, 1e, 33, 01, 0d, 01, 0b, 0d, 01, 0c, 00, 1e, 2b, 01, 05, 03, 0b, 11, 03, 0c, 00, 1e, 23, 01, 01, 00, 02]
|
||||
Raw bytes (78): 0x[01, 01, 0e, 05, 06, 01, 05, 09, 36, 03, 09, 0d, 2e, 33, 0d, 09, 36, 03, 09, 11, 26, 2b, 11, 0d, 2e, 33, 0d, 09, 36, 03, 09, 09, 01, 9a, 01, 01, 01, 0b, 05, 01, 0c, 00, 1e, 03, 01, 05, 00, 0b, 09, 00, 0c, 00, 1e, 33, 01, 0d, 01, 0b, 0d, 01, 0c, 00, 1e, 2b, 01, 05, 03, 0b, 11, 03, 0c, 00, 1e, 23, 01, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 14
|
||||
@ -49,7 +49,7 @@ Number of expressions: 14
|
||||
- expression 12 operands: lhs = Counter(2), rhs = Expression(13, Sub)
|
||||
- expression 13 operands: lhs = Expression(0, Add), rhs = Counter(2)
|
||||
Number of file 0 mappings: 9
|
||||
- Code(Counter(0)) at (prev + 152, 1) to (start + 1, 11)
|
||||
- Code(Counter(0)) at (prev + 154, 1) to (start + 1, 11)
|
||||
- Code(Counter(1)) at (prev + 1, 12) to (start + 0, 30)
|
||||
- Code(Expression(0, Add)) at (prev + 1, 5) to (start + 0, 11)
|
||||
= (c1 + (c0 - c1))
|
||||
@ -64,28 +64,28 @@ Number of file 0 mappings: 9
|
||||
= (c4 + ((c3 + ((c2 + ((c1 + (c0 - c1)) - c2)) - c3)) - c4))
|
||||
|
||||
Function name: issue_84561::test2
|
||||
Raw bytes (24): 0x[01, 01, 02, 05, 06, 01, 05, 03, 01, ae, 01, 01, 01, 10, 05, 01, 11, 00, 23, 03, 01, 01, 00, 02]
|
||||
Raw bytes (24): 0x[01, 01, 02, 05, 06, 01, 05, 03, 01, b0, 01, 01, 01, 10, 05, 01, 11, 00, 23, 03, 01, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(1), rhs = Expression(1, Sub)
|
||||
- expression 1 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
Number of file 0 mappings: 3
|
||||
- Code(Counter(0)) at (prev + 174, 1) to (start + 1, 16)
|
||||
- Code(Counter(0)) at (prev + 176, 1) to (start + 1, 16)
|
||||
- Code(Counter(1)) at (prev + 1, 17) to (start + 0, 35)
|
||||
- Code(Expression(0, Add)) at (prev + 1, 1) to (start + 0, 2)
|
||||
= (c1 + (c0 - c1))
|
||||
|
||||
Function name: issue_84561::test2::call_print
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 01, a5, 01, 09, 02, 0a]
|
||||
Raw bytes (10): 0x[01, 01, 00, 01, 01, a7, 01, 09, 02, 0a]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 165, 9) to (start + 2, 10)
|
||||
- Code(Counter(0)) at (prev + 167, 9) to (start + 2, 10)
|
||||
|
||||
Function name: issue_84561::test3
|
||||
Raw bytes (436): 0x[01, 01, 41, 05, 09, 0d, 00, 15, 19, 12, 00, 15, 19, 21, 00, 1e, 00, 21, 00, 31, 00, 3d, 41, 2e, 45, 3d, 41, 42, 49, 45, 00, 3f, 51, 42, 49, 45, 00, 5d, 8a, 01, 8f, 01, 5d, 92, 01, 55, 51, 00, 92, 01, 55, 51, 00, 8f, 01, 5d, 92, 01, 55, 51, 00, 87, 01, 61, 5d, 8a, 01, 8f, 01, 5d, 92, 01, 55, 51, 00, 82, 01, 65, 87, 01, 61, 5d, 8a, 01, 8f, 01, 5d, 92, 01, 55, 51, 00, 75, f6, 01, fb, 01, 79, 71, fe, 01, 82, 02, 71, 69, 6d, 71, fe, 01, 82, 02, 71, 69, 6d, 69, 6d, 82, 02, 71, 69, 6d, fb, 01, 79, 71, fe, 01, 82, 02, 71, 69, 6d, f3, 01, 7d, 75, f6, 01, fb, 01, 79, 71, fe, 01, 82, 02, 71, 69, 6d, ee, 01, 00, f3, 01, 7d, 75, f6, 01, fb, 01, 79, 71, fe, 01, 82, 02, 71, 69, 6d, 33, 01, 06, 01, 03, 1c, 05, 04, 09, 01, 1c, 02, 02, 05, 04, 1f, 0d, 05, 05, 00, 1f, 06, 01, 05, 00, 1f, 15, 01, 09, 01, 1c, 12, 02, 05, 00, 1f, 0e, 01, 05, 00, 0f, 00, 00, 20, 00, 30, 21, 01, 05, 03, 0f, 00, 03, 20, 00, 30, 00, 00, 33, 00, 41, 00, 00, 4b, 00, 5a, 1e, 01, 05, 00, 0f, 00, 05, 09, 03, 10, 00, 05, 0d, 00, 1b, 00, 02, 0d, 00, 1c, 1a, 04, 09, 05, 06, 31, 06, 05, 03, 06, 22, 04, 05, 03, 06, 3d, 04, 09, 04, 06, 2e, 05, 08, 00, 0f, 45, 01, 09, 03, 0a, 2a, 05, 09, 03, 0a, 3f, 05, 08, 00, 0f, 51, 01, 09, 00, 13, 00, 03, 0d, 00, 1d, 3a, 03, 09, 00, 13, 00, 03, 0d, 00, 1d, 87, 01, 03, 05, 00, 0f, 8f, 01, 01, 0c, 00, 13, 5d, 01, 0d, 00, 13, 8a, 01, 02, 0d, 00, 13, 82, 01, 04, 05, 02, 13, 65, 03, 0d, 00, 13, 7e, 02, 0d, 00, 13, f3, 01, 03, 05, 00, 0f, 69, 01, 0c, 00, 13, 6d, 01, 0d, 03, 0e, 75, 04, 0d, 00, 13, fb, 01, 02, 0d, 00, 17, 82, 02, 01, 14, 00, 1b, 71, 01, 15, 00, 1b, fe, 01, 02, 15, 00, 1b, f6, 01, 04, 0d, 00, 13, 7d, 03, 09, 00, 19, ee, 01, 02, 05, 00, 0f, ea, 01, 03, 09, 00, 22, 00, 02, 05, 00, 0f, 00, 03, 09, 00, 2c, 00, 02, 01, 00, 02]
|
||||
Raw bytes (436): 0x[01, 01, 41, 05, 09, 0d, 00, 15, 19, 12, 00, 15, 19, 21, 00, 1e, 00, 21, 00, 31, 00, 3d, 41, 2e, 45, 3d, 41, 42, 49, 45, 00, 3f, 51, 42, 49, 45, 00, 5d, 8a, 01, 8f, 01, 5d, 92, 01, 55, 51, 00, 92, 01, 55, 51, 00, 8f, 01, 5d, 92, 01, 55, 51, 00, 87, 01, 61, 5d, 8a, 01, 8f, 01, 5d, 92, 01, 55, 51, 00, 82, 01, 65, 87, 01, 61, 5d, 8a, 01, 8f, 01, 5d, 92, 01, 55, 51, 00, 75, f6, 01, fb, 01, 79, 71, fe, 01, 82, 02, 71, 69, 6d, 71, fe, 01, 82, 02, 71, 69, 6d, 69, 6d, 82, 02, 71, 69, 6d, fb, 01, 79, 71, fe, 01, 82, 02, 71, 69, 6d, f3, 01, 7d, 75, f6, 01, fb, 01, 79, 71, fe, 01, 82, 02, 71, 69, 6d, ee, 01, 00, f3, 01, 7d, 75, f6, 01, fb, 01, 79, 71, fe, 01, 82, 02, 71, 69, 6d, 33, 01, 08, 01, 03, 1c, 05, 04, 09, 01, 1c, 02, 02, 05, 04, 1f, 0d, 05, 05, 00, 1f, 06, 01, 05, 00, 1f, 15, 01, 09, 01, 1c, 12, 02, 05, 00, 1f, 0e, 01, 05, 00, 0f, 00, 00, 20, 00, 30, 21, 01, 05, 03, 0f, 00, 03, 20, 00, 30, 00, 00, 33, 00, 41, 00, 00, 4b, 00, 5a, 1e, 01, 05, 00, 0f, 00, 05, 09, 03, 10, 00, 05, 0d, 00, 1b, 00, 02, 0d, 00, 1c, 1a, 04, 09, 05, 06, 31, 06, 05, 03, 06, 22, 04, 05, 03, 06, 3d, 04, 09, 04, 06, 2e, 05, 08, 00, 0f, 45, 01, 09, 03, 0a, 2a, 05, 09, 03, 0a, 3f, 05, 08, 00, 0f, 51, 01, 09, 00, 13, 00, 03, 0d, 00, 1d, 3a, 03, 09, 00, 13, 00, 03, 0d, 00, 1d, 87, 01, 03, 05, 00, 0f, 8f, 01, 01, 0c, 00, 13, 5d, 01, 0d, 00, 13, 8a, 01, 02, 0d, 00, 13, 82, 01, 04, 05, 02, 13, 65, 03, 0d, 00, 13, 7e, 02, 0d, 00, 13, f3, 01, 03, 05, 00, 0f, 69, 01, 0c, 00, 13, 6d, 01, 0d, 03, 0e, 75, 04, 0d, 00, 13, fb, 01, 02, 0d, 00, 17, 82, 02, 01, 14, 00, 1b, 71, 01, 15, 00, 1b, fe, 01, 02, 15, 00, 1b, f6, 01, 04, 0d, 00, 13, 7d, 03, 09, 00, 19, ee, 01, 02, 05, 00, 0f, ea, 01, 03, 09, 00, 22, 00, 02, 05, 00, 0f, 00, 03, 09, 00, 2c, 00, 02, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 65
|
||||
@ -155,7 +155,7 @@ Number of expressions: 65
|
||||
- expression 63 operands: lhs = Expression(64, Sub), rhs = Counter(28)
|
||||
- expression 64 operands: lhs = Counter(26), rhs = Counter(27)
|
||||
Number of file 0 mappings: 51
|
||||
- Code(Counter(0)) at (prev + 6, 1) to (start + 3, 28)
|
||||
- Code(Counter(0)) at (prev + 8, 1) to (start + 3, 28)
|
||||
- Code(Counter(1)) at (prev + 4, 9) to (start + 1, 28)
|
||||
- Code(Expression(0, Sub)) at (prev + 2, 5) to (start + 4, 31)
|
||||
= (c1 - c2)
|
||||
|
@ -3,6 +3,8 @@
|
||||
LL| |// failure-status: 101
|
||||
LL| 21|#[derive(PartialEq, Eq)]
|
||||
LL| |struct Foo(u32);
|
||||
LL| |
|
||||
LL| |#[rustfmt::skip]
|
||||
LL| 1|fn test3() {
|
||||
LL| 1| let is_true = std::env::args().len() == 1;
|
||||
LL| 1| let bar = Foo(1);
|
||||
|
@ -3,6 +3,8 @@
|
||||
// failure-status: 101
|
||||
#[derive(PartialEq, Eq)]
|
||||
struct Foo(u32);
|
||||
|
||||
#[rustfmt::skip]
|
||||
fn test3() {
|
||||
let is_true = std::env::args().len() == 1;
|
||||
let bar = Foo(1);
|
||||
|
@ -1,5 +1,5 @@
|
||||
Function name: lazy_boolean::main
|
||||
Raw bytes (636): 0x[01, 01, a4, 01, 01, 05, 09, 8a, 05, 8f, 05, 09, 05, 02, 05, 02, 8f, 05, 09, 05, 02, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, 09, 8a, 05, 8f, 05, 09, 05, 02, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, 15, f2, 04, f7, 04, 15, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, 15, f2, 04, f7, 04, 15, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, ef, 04, 19, 15, f2, 04, f7, 04, 15, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, 19, ea, 04, ef, 04, 19, 15, f2, 04, f7, 04, 15, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, e7, 04, 1d, 19, ea, 04, ef, 04, 19, 15, f2, 04, f7, 04, 15, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, 1d, e2, 04, e7, 04, 1d, 19, ea, 04, ef, 04, 19, 15, f2, 04, f7, 04, 15, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, df, 04, 21, 1d, e2, 04, e7, 04, 1d, 19, ea, 04, ef, 04, 19, 15, f2, 04, f7, 04, 15, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, 21, da, 04, df, 04, 21, 1d, e2, 04, e7, 04, 1d, 19, ea, 04, ef, 04, 19, 15, f2, 04, f7, 04, 15, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, d7, 04, 25, 21, da, 04, df, 04, 21, 1d, e2, 04, e7, 04, 1d, 19, ea, 04, ef, 04, 19, 15, f2, 04, f7, 04, 15, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, 25, d2, 04, d7, 04, 25, 21, da, 04, df, 04, 21, 1d, e2, 04, e7, 04, 1d, 19, ea, 04, ef, 04, 19, 15, f2, 04, f7, 04, 15, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, 1c, 01, 03, 01, 07, 0f, 05, 07, 10, 04, 06, 02, 04, 06, 00, 07, 87, 05, 02, 09, 00, 11, 8f, 05, 02, 0d, 00, 12, 8a, 05, 02, 0d, 00, 12, ff, 04, 03, 09, 00, 11, 87, 05, 02, 0d, 00, 12, 82, 05, 02, 0d, 00, 12, f7, 04, 02, 09, 00, 11, ff, 04, 00, 14, 00, 19, 11, 00, 1d, 00, 22, ef, 04, 01, 09, 00, 11, f7, 04, 00, 14, 00, 19, 15, 00, 1d, 00, 22, ef, 04, 03, 09, 01, 10, ea, 04, 02, 05, 03, 06, 19, 03, 06, 00, 07, e7, 04, 03, 09, 00, 10, 1d, 01, 05, 03, 06, e2, 04, 05, 05, 03, 06, df, 04, 05, 08, 00, 10, da, 04, 00, 11, 02, 06, 21, 02, 06, 00, 07, d7, 04, 02, 08, 00, 0f, 25, 00, 10, 02, 06, d2, 04, 02, 0c, 02, 06, cf, 04, 03, 01, 00, 02]
|
||||
Raw bytes (636): 0x[01, 01, a4, 01, 01, 05, 09, 8a, 05, 8f, 05, 09, 05, 02, 05, 02, 8f, 05, 09, 05, 02, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, 09, 8a, 05, 8f, 05, 09, 05, 02, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, 15, f2, 04, f7, 04, 15, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, 15, f2, 04, f7, 04, 15, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, ef, 04, 19, 15, f2, 04, f7, 04, 15, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, 19, ea, 04, ef, 04, 19, 15, f2, 04, f7, 04, 15, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, e7, 04, 1d, 19, ea, 04, ef, 04, 19, 15, f2, 04, f7, 04, 15, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, 1d, e2, 04, e7, 04, 1d, 19, ea, 04, ef, 04, 19, 15, f2, 04, f7, 04, 15, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, df, 04, 21, 1d, e2, 04, e7, 04, 1d, 19, ea, 04, ef, 04, 19, 15, f2, 04, f7, 04, 15, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, 21, da, 04, df, 04, 21, 1d, e2, 04, e7, 04, 1d, 19, ea, 04, ef, 04, 19, 15, f2, 04, f7, 04, 15, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, d7, 04, 25, 21, da, 04, df, 04, 21, 1d, e2, 04, e7, 04, 1d, 19, ea, 04, ef, 04, 19, 15, f2, 04, f7, 04, 15, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, 25, d2, 04, d7, 04, 25, 21, da, 04, df, 04, 21, 1d, e2, 04, e7, 04, 1d, 19, ea, 04, ef, 04, 19, 15, f2, 04, f7, 04, 15, 11, fa, 04, ff, 04, 11, 0d, 82, 05, 87, 05, 0d, 09, 8a, 05, 8f, 05, 09, 05, 02, 1c, 01, 04, 01, 07, 0f, 05, 07, 10, 04, 06, 02, 04, 06, 00, 07, 87, 05, 02, 09, 00, 11, 8f, 05, 02, 0d, 00, 12, 8a, 05, 02, 0d, 00, 12, ff, 04, 03, 09, 00, 11, 87, 05, 02, 0d, 00, 12, 82, 05, 02, 0d, 00, 12, f7, 04, 02, 09, 00, 11, ff, 04, 00, 14, 00, 19, 11, 00, 1d, 00, 22, ef, 04, 01, 09, 00, 11, f7, 04, 00, 14, 00, 19, 15, 00, 1d, 00, 22, ef, 04, 03, 09, 01, 10, ea, 04, 02, 05, 03, 06, 19, 03, 06, 00, 07, e7, 04, 03, 09, 00, 10, 1d, 01, 05, 03, 06, e2, 04, 05, 05, 03, 06, df, 04, 05, 08, 00, 10, da, 04, 00, 11, 02, 06, 21, 02, 06, 00, 07, d7, 04, 02, 08, 00, 0f, 25, 00, 10, 02, 06, d2, 04, 02, 0c, 02, 06, cf, 04, 03, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 164
|
||||
@ -168,7 +168,7 @@ Number of expressions: 164
|
||||
- expression 162 operands: lhs = Expression(163, Add), rhs = Counter(2)
|
||||
- expression 163 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 28
|
||||
- Code(Counter(0)) at (prev + 3, 1) to (start + 7, 15)
|
||||
- Code(Counter(0)) at (prev + 4, 1) to (start + 7, 15)
|
||||
- Code(Counter(1)) at (prev + 7, 16) to (start + 4, 6)
|
||||
- Code(Expression(0, Sub)) at (prev + 4, 6) to (start + 0, 7)
|
||||
= (c0 - c1)
|
||||
|
@ -1,5 +1,6 @@
|
||||
LL| |#![allow(unused_assignments, unused_variables)]
|
||||
LL| |
|
||||
LL| |#[rustfmt::skip]
|
||||
LL| 1|fn main() {
|
||||
LL| 1| // Initialize test constants in a way that cannot be determined at compile time, to ensure
|
||||
LL| 1| // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from
|
||||
|
@ -1,5 +1,6 @@
|
||||
#![allow(unused_assignments, unused_variables)]
|
||||
|
||||
#[rustfmt::skip]
|
||||
fn main() {
|
||||
// Initialize test constants in a way that cannot be determined at compile time, to ensure
|
||||
// rustc and LLVM cannot optimize out statements (or coverage counters) downstream from
|
||||
|
@ -1,8 +1,8 @@
|
||||
Function name: loop_break_value::main
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 03, 01, 0a, 02]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 04, 01, 0a, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 3, 1) to (start + 10, 2)
|
||||
- Code(Counter(0)) at (prev + 4, 1) to (start + 10, 2)
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
LL| |#![allow(unused_assignments, unused_variables)]
|
||||
LL| |
|
||||
LL| |#[rustfmt::skip]
|
||||
LL| 1|fn main() {
|
||||
LL| 1| let result
|
||||
LL| 1| =
|
||||
|
@ -1,5 +1,6 @@
|
||||
#![allow(unused_assignments, unused_variables)]
|
||||
|
||||
#[rustfmt::skip]
|
||||
fn main() {
|
||||
let result
|
||||
=
|
||||
|
@ -55,10 +55,10 @@ Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 12, 5) to (start + 6, 6)
|
||||
|
||||
Function name: partial_eq::main
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 15, 01, 05, 02]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 15, 01, 0a, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 21, 1) to (start + 5, 2)
|
||||
- Code(Counter(0)) at (prev + 21, 1) to (start + 10, 2)
|
||||
|
||||
|
@ -23,7 +23,12 @@
|
||||
LL| 1| let version_3_2_1 = Version::new(3, 2, 1);
|
||||
LL| 1| let version_3_3_0 = Version::new(3, 3, 0);
|
||||
LL| 1|
|
||||
LL| 1| println!("{:?} < {:?} = {}", version_3_2_1, version_3_3_0, version_3_2_1 < version_3_3_0);
|
||||
LL| 1| println!(
|
||||
LL| 1| "{:?} < {:?} = {}",
|
||||
LL| 1| version_3_2_1,
|
||||
LL| 1| version_3_3_0,
|
||||
LL| 1| version_3_2_1 < version_3_3_0
|
||||
LL| 1| );
|
||||
LL| 1|}
|
||||
LL| |
|
||||
LL| |/*
|
||||
|
@ -22,7 +22,12 @@ fn main() {
|
||||
let version_3_2_1 = Version::new(3, 2, 1);
|
||||
let version_3_3_0 = Version::new(3, 3, 0);
|
||||
|
||||
println!("{:?} < {:?} = {}", version_3_2_1, version_3_3_0, version_3_2_1 < version_3_3_0);
|
||||
println!(
|
||||
"{:?} < {:?} = {}",
|
||||
version_3_2_1,
|
||||
version_3_3_0,
|
||||
version_3_2_1 < version_3_3_0
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1,5 +1,5 @@
|
||||
Function name: simple_loop::main
|
||||
Raw bytes (57): 0x[01, 01, 09, 01, 05, 23, 09, 05, 02, 1f, 09, 23, 09, 05, 02, 1f, 09, 23, 09, 05, 02, 07, 01, 03, 01, 09, 10, 05, 0a, 05, 05, 06, 02, 05, 06, 00, 07, 1f, 05, 0d, 02, 0e, 1a, 04, 0d, 00, 12, 09, 02, 0a, 03, 0a, 1a, 06, 01, 00, 02]
|
||||
Raw bytes (57): 0x[01, 01, 09, 01, 05, 23, 09, 05, 02, 1f, 09, 23, 09, 05, 02, 1f, 09, 23, 09, 05, 02, 07, 01, 04, 01, 09, 10, 05, 0a, 05, 05, 06, 02, 05, 06, 00, 07, 1f, 05, 0d, 02, 0e, 1a, 04, 0d, 00, 12, 09, 02, 0a, 03, 0a, 1a, 06, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 9
|
||||
@ -13,7 +13,7 @@ Number of expressions: 9
|
||||
- expression 7 operands: lhs = Expression(8, Add), rhs = Counter(2)
|
||||
- expression 8 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 7
|
||||
- Code(Counter(0)) at (prev + 3, 1) to (start + 9, 16)
|
||||
- Code(Counter(0)) at (prev + 4, 1) to (start + 9, 16)
|
||||
- Code(Counter(1)) at (prev + 10, 5) to (start + 5, 6)
|
||||
- Code(Expression(0, Sub)) at (prev + 5, 6) to (start + 0, 7)
|
||||
= (c0 - c1)
|
||||
|
@ -1,5 +1,6 @@
|
||||
LL| |#![allow(unused_assignments)]
|
||||
LL| |
|
||||
LL| |#[rustfmt::skip]
|
||||
LL| 1|fn main() {
|
||||
LL| 1| // Initialize test constants in a way that cannot be determined at compile time, to ensure
|
||||
LL| 1| // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from
|
||||
|
@ -1,5 +1,6 @@
|
||||
#![allow(unused_assignments)]
|
||||
|
||||
#[rustfmt::skip]
|
||||
fn main() {
|
||||
// Initialize test constants in a way that cannot be determined at compile time, to ensure
|
||||
// rustc and LLVM cannot optimize out statements (or coverage counters) downstream from
|
||||
|
@ -1,5 +1,5 @@
|
||||
Function name: simple_match::main
|
||||
Raw bytes (78): 0x[01, 01, 0c, 01, 05, 2b, 2f, 05, 02, 09, 0d, 27, 11, 2b, 2f, 05, 02, 09, 0d, 27, 11, 2b, 2f, 05, 02, 09, 0d, 0a, 01, 03, 01, 07, 0f, 05, 07, 10, 02, 06, 02, 02, 06, 00, 07, 27, 05, 09, 00, 0d, 22, 05, 0d, 00, 16, 09, 02, 0d, 00, 0e, 22, 02, 11, 02, 12, 09, 04, 0d, 07, 0e, 0d, 0a, 0d, 00, 0f, 11, 03, 01, 00, 02]
|
||||
Raw bytes (78): 0x[01, 01, 0c, 01, 05, 2b, 2f, 05, 02, 09, 0d, 27, 11, 2b, 2f, 05, 02, 09, 0d, 27, 11, 2b, 2f, 05, 02, 09, 0d, 0a, 01, 04, 01, 07, 0f, 05, 07, 10, 02, 06, 02, 02, 06, 00, 07, 27, 05, 09, 00, 0d, 22, 05, 0d, 00, 16, 09, 02, 0d, 00, 0e, 22, 02, 11, 02, 12, 09, 04, 0d, 07, 0e, 0d, 0a, 0d, 00, 0f, 11, 03, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 12
|
||||
@ -16,7 +16,7 @@ Number of expressions: 12
|
||||
- expression 10 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
- expression 11 operands: lhs = Counter(2), rhs = Counter(3)
|
||||
Number of file 0 mappings: 10
|
||||
- Code(Counter(0)) at (prev + 3, 1) to (start + 7, 15)
|
||||
- Code(Counter(0)) at (prev + 4, 1) to (start + 7, 15)
|
||||
- Code(Counter(1)) at (prev + 7, 16) to (start + 2, 6)
|
||||
- Code(Expression(0, Sub)) at (prev + 2, 6) to (start + 0, 7)
|
||||
= (c0 - c1)
|
||||
|
@ -1,5 +1,6 @@
|
||||
LL| |#![allow(unused_assignments, unused_variables)]
|
||||
LL| |
|
||||
LL| |#[rustfmt::skip]
|
||||
LL| 1|fn main() {
|
||||
LL| 1| // Initialize test constants in a way that cannot be determined at compile time, to ensure
|
||||
LL| 1| // rustc and LLVM cannot optimize out statements (or coverage counters) downstream from
|
||||
|
@ -1,5 +1,6 @@
|
||||
#![allow(unused_assignments, unused_variables)]
|
||||
|
||||
#[rustfmt::skip]
|
||||
fn main() {
|
||||
// Initialize test constants in a way that cannot be determined at compile time, to ensure
|
||||
// rustc and LLVM cannot optimize out statements (or coverage counters) downstream from
|
||||
|
@ -1,8 +1,8 @@
|
||||
Function name: thin_lto::main
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 03, 01, 01, 02]
|
||||
Raw bytes (9): 0x[01, 01, 00, 01, 01, 03, 01, 00, 11]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 0
|
||||
Number of file 0 mappings: 1
|
||||
- Code(Counter(0)) at (prev + 3, 1) to (start + 1, 2)
|
||||
- Code(Counter(0)) at (prev + 3, 1) to (start + 0, 17)
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
LL| |// compile-flags: -O -C lto=thin -C prefer-dynamic=no
|
||||
LL| |
|
||||
LL| 1|pub fn main() {
|
||||
LL| 1|}
|
||||
LL| 1|pub fn main() {}
|
||||
|
||||
|
@ -1,4 +1,3 @@
|
||||
// compile-flags: -O -C lto=thin -C prefer-dynamic=no
|
||||
|
||||
pub fn main() {
|
||||
}
|
||||
pub fn main() {}
|
||||
|
@ -1,12 +1,12 @@
|
||||
Function name: <try_error_result::Thing1>::get_thing_2
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 28, 05, 01, 18, 05, 02, 0d, 00, 14, 02, 02, 0d, 00, 1a, 07, 02, 05, 00, 06]
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 29, 05, 01, 18, 05, 02, 0d, 00, 14, 02, 02, 0d, 00, 1a, 07, 02, 05, 00, 06]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 40, 5) to (start + 1, 24)
|
||||
- Code(Counter(0)) at (prev + 41, 5) to (start + 1, 24)
|
||||
- Code(Counter(1)) at (prev + 2, 13) to (start + 0, 20)
|
||||
- Code(Expression(0, Sub)) at (prev + 2, 13) to (start + 0, 26)
|
||||
= (c0 - c1)
|
||||
@ -14,14 +14,14 @@ Number of file 0 mappings: 4
|
||||
= (c1 + (c0 - c1))
|
||||
|
||||
Function name: <try_error_result::Thing2>::call
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 33, 05, 01, 18, 05, 02, 0d, 00, 14, 02, 02, 0d, 00, 13, 07, 02, 05, 00, 06]
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 34, 05, 01, 18, 05, 02, 0d, 00, 14, 02, 02, 0d, 00, 13, 07, 02, 05, 00, 06]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 51, 5) to (start + 1, 24)
|
||||
- Code(Counter(0)) at (prev + 52, 5) to (start + 1, 24)
|
||||
- Code(Counter(1)) at (prev + 2, 13) to (start + 0, 20)
|
||||
- Code(Expression(0, Sub)) at (prev + 2, 13) to (start + 0, 19)
|
||||
= (c0 - c1)
|
||||
@ -44,14 +44,14 @@ Number of file 0 mappings: 4
|
||||
= (c1 + (c0 - c1))
|
||||
|
||||
Function name: try_error_result::main
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 70, 01, 02, 0c, 05, 03, 05, 00, 06, 02, 02, 05, 00, 0b, 07, 01, 01, 00, 02]
|
||||
Raw bytes (28): 0x[01, 01, 02, 01, 05, 05, 02, 04, 01, 73, 01, 02, 0c, 05, 03, 05, 00, 06, 02, 02, 05, 00, 0b, 07, 01, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 2
|
||||
- expression 0 operands: lhs = Counter(0), rhs = Counter(1)
|
||||
- expression 1 operands: lhs = Counter(1), rhs = Expression(0, Sub)
|
||||
Number of file 0 mappings: 4
|
||||
- Code(Counter(0)) at (prev + 112, 1) to (start + 2, 12)
|
||||
- Code(Counter(0)) at (prev + 115, 1) to (start + 2, 12)
|
||||
- Code(Counter(1)) at (prev + 3, 5) to (start + 0, 6)
|
||||
- Code(Expression(0, Sub)) at (prev + 2, 5) to (start + 0, 11)
|
||||
= (c0 - c1)
|
||||
@ -59,7 +59,7 @@ Number of file 0 mappings: 4
|
||||
= (c1 + (c0 - c1))
|
||||
|
||||
Function name: try_error_result::test1
|
||||
Raw bytes (77): 0x[01, 01, 09, 01, 07, 05, 09, 03, 0d, 1d, 11, 16, 1d, 03, 0d, 1f, 0d, 23, 19, 11, 15, 0b, 01, 0c, 01, 02, 17, 03, 07, 09, 00, 0e, 16, 02, 09, 04, 1a, 1d, 06, 0d, 00, 29, 11, 00, 29, 00, 2a, 0e, 01, 0d, 00, 2a, 15, 00, 2a, 00, 2b, 12, 04, 0d, 00, 2a, 19, 00, 2a, 00, 2b, 0d, 03, 05, 00, 0b, 1b, 01, 01, 00, 02]
|
||||
Raw bytes (77): 0x[01, 01, 09, 01, 07, 05, 09, 03, 0d, 1d, 11, 16, 1d, 03, 0d, 1f, 0d, 23, 19, 11, 15, 0b, 01, 0d, 01, 02, 17, 03, 07, 09, 00, 0e, 16, 02, 09, 04, 1a, 1d, 06, 0d, 00, 29, 11, 00, 29, 00, 2a, 0e, 01, 0d, 00, 2a, 15, 00, 2a, 00, 2b, 12, 04, 0d, 00, 2a, 19, 00, 2a, 00, 2b, 0d, 03, 05, 00, 0b, 1b, 01, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 9
|
||||
@ -73,7 +73,7 @@ Number of expressions: 9
|
||||
- expression 7 operands: lhs = Expression(8, Add), rhs = Counter(6)
|
||||
- expression 8 operands: lhs = Counter(4), rhs = Counter(5)
|
||||
Number of file 0 mappings: 11
|
||||
- Code(Counter(0)) at (prev + 12, 1) to (start + 2, 23)
|
||||
- Code(Counter(0)) at (prev + 13, 1) to (start + 2, 23)
|
||||
- Code(Expression(0, Add)) at (prev + 7, 9) to (start + 0, 14)
|
||||
= (c0 + (c1 + c2))
|
||||
- Code(Expression(5, Sub)) at (prev + 2, 9) to (start + 4, 26)
|
||||
@ -91,7 +91,7 @@ Number of file 0 mappings: 11
|
||||
= (((c4 + c5) + c6) + c3)
|
||||
|
||||
Function name: try_error_result::test2
|
||||
Raw bytes (358): 0x[01, 01, 3b, 01, 07, 05, 09, 03, 0d, 41, 11, 4a, 15, 41, 11, 42, 1d, 46, 19, 4a, 15, 41, 11, 4a, 15, 41, 11, 46, 19, 4a, 15, 41, 11, 42, 1d, 46, 19, 4a, 15, 41, 11, 5e, 25, 49, 21, 49, 21, 5e, 25, 49, 21, 8a, 01, 2d, 8e, 01, 29, 92, 01, 41, 03, 0d, 92, 01, 41, 03, 0d, 8e, 01, 29, 92, 01, 41, 03, 0d, 8a, 01, 2d, 8e, 01, 29, 92, 01, 41, 03, 0d, a6, 01, 35, 45, 31, 45, 31, a6, 01, 35, 45, 31, ba, 01, 3d, 4d, 39, 4d, 39, ba, 01, 3d, 4d, 39, c3, 01, 0d, c7, 01, db, 01, cb, 01, cf, 01, 11, 15, d3, 01, d7, 01, 19, 1d, 21, 25, df, 01, e3, 01, 29, 2d, e7, 01, eb, 01, 31, 35, 39, 3d, 28, 01, 3c, 01, 03, 17, 03, 08, 09, 00, 0e, 92, 01, 02, 09, 04, 1a, 41, 06, 0d, 00, 2f, 11, 00, 2f, 00, 30, 4a, 00, 31, 03, 35, 15, 04, 11, 00, 12, 46, 02, 11, 04, 12, 3e, 05, 11, 00, 14, 46, 00, 17, 00, 41, 19, 00, 41, 00, 42, 42, 00, 43, 00, 5f, 1d, 00, 5f, 00, 60, 3e, 01, 0d, 00, 20, 5a, 01, 11, 00, 14, 49, 00, 17, 00, 41, 21, 00, 41, 00, 42, 5e, 00, 43, 00, 60, 25, 00, 60, 00, 61, 5a, 01, 0d, 00, 20, 86, 01, 04, 11, 00, 14, 8e, 01, 00, 17, 00, 42, 29, 00, 42, 00, 43, 8a, 01, 00, 44, 00, 61, 2d, 00, 61, 00, 62, 86, 01, 01, 0d, 00, 20, a2, 01, 01, 11, 00, 14, 45, 00, 17, 01, 36, 31, 01, 36, 00, 37, a6, 01, 01, 12, 00, 2f, 35, 00, 2f, 00, 30, a2, 01, 01, 0d, 00, 20, b6, 01, 01, 11, 00, 14, 4d, 00, 17, 01, 36, 39, 02, 11, 00, 12, ba, 01, 01, 12, 00, 2f, 3d, 01, 11, 00, 12, b6, 01, 02, 0d, 00, 20, 0d, 03, 05, 00, 0b, bf, 01, 01, 01, 00, 02]
|
||||
Raw bytes (358): 0x[01, 01, 3b, 01, 07, 05, 09, 03, 0d, 41, 11, 4a, 15, 41, 11, 42, 1d, 46, 19, 4a, 15, 41, 11, 4a, 15, 41, 11, 46, 19, 4a, 15, 41, 11, 42, 1d, 46, 19, 4a, 15, 41, 11, 5e, 25, 49, 21, 49, 21, 5e, 25, 49, 21, 8a, 01, 2d, 8e, 01, 29, 92, 01, 41, 03, 0d, 92, 01, 41, 03, 0d, 8e, 01, 29, 92, 01, 41, 03, 0d, 8a, 01, 2d, 8e, 01, 29, 92, 01, 41, 03, 0d, a6, 01, 35, 45, 31, 45, 31, a6, 01, 35, 45, 31, ba, 01, 3d, 4d, 39, 4d, 39, ba, 01, 3d, 4d, 39, c3, 01, 0d, c7, 01, db, 01, cb, 01, cf, 01, 11, 15, d3, 01, d7, 01, 19, 1d, 21, 25, df, 01, e3, 01, 29, 2d, e7, 01, eb, 01, 31, 35, 39, 3d, 28, 01, 3e, 01, 03, 17, 03, 08, 09, 00, 0e, 92, 01, 02, 09, 04, 1a, 41, 06, 0d, 00, 2f, 11, 00, 2f, 00, 30, 4a, 00, 31, 03, 35, 15, 04, 11, 00, 12, 46, 02, 11, 04, 12, 3e, 05, 11, 00, 14, 46, 00, 17, 00, 41, 19, 00, 41, 00, 42, 42, 00, 43, 00, 5f, 1d, 00, 5f, 00, 60, 3e, 01, 0d, 00, 20, 5a, 01, 11, 00, 14, 49, 00, 17, 00, 41, 21, 00, 41, 00, 42, 5e, 00, 43, 00, 60, 25, 00, 60, 00, 61, 5a, 01, 0d, 00, 20, 86, 01, 04, 11, 00, 14, 8e, 01, 00, 17, 00, 42, 29, 00, 42, 00, 43, 8a, 01, 00, 44, 00, 61, 2d, 00, 61, 00, 62, 86, 01, 01, 0d, 00, 20, a2, 01, 01, 11, 00, 14, 45, 00, 17, 01, 36, 31, 01, 36, 00, 37, a6, 01, 01, 12, 00, 2f, 35, 00, 2f, 00, 30, a2, 01, 01, 0d, 00, 20, b6, 01, 01, 11, 00, 14, 4d, 00, 17, 01, 36, 39, 02, 11, 00, 12, ba, 01, 01, 12, 00, 2f, 3d, 01, 11, 00, 12, b6, 01, 02, 0d, 00, 20, 0d, 03, 05, 00, 0b, bf, 01, 01, 01, 00, 02]
|
||||
Number of files: 1
|
||||
- file 0 => global file 1
|
||||
Number of expressions: 59
|
||||
@ -155,7 +155,7 @@ Number of expressions: 59
|
||||
- expression 57 operands: lhs = Counter(12), rhs = Counter(13)
|
||||
- expression 58 operands: lhs = Counter(14), rhs = Counter(15)
|
||||
Number of file 0 mappings: 40
|
||||
- Code(Counter(0)) at (prev + 60, 1) to (start + 3, 23)
|
||||
- Code(Counter(0)) at (prev + 62, 1) to (start + 3, 23)
|
||||
- Code(Expression(0, Add)) at (prev + 8, 9) to (start + 0, 14)
|
||||
= (c0 + (c1 + c2))
|
||||
- Code(Expression(36, Sub)) at (prev + 2, 9) to (start + 4, 26)
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user