mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-02 18:12:51 +00:00
Auto merge of #107267 - cjgillot:keep-aggregate, r=oli-obk
Do not deaggregate MIR This turns out to simplify a lot of things. I haven't checked the consequences for miri yet. cc `@JakobDegen` r? `@oli-obk`
This commit is contained in:
commit
9dee4e4c42
@ -2645,6 +2645,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
|
||||
operands,
|
||||
) = rvalue
|
||||
{
|
||||
let def_id = def_id.expect_local();
|
||||
for operand in operands {
|
||||
let (Operand::Copy(assigned_from) | Operand::Move(assigned_from)) = operand else {
|
||||
continue;
|
||||
@ -2667,7 +2668,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
|
||||
// into a place then we should annotate the closure in
|
||||
// case it ends up being assigned into the return place.
|
||||
annotated_closure =
|
||||
self.annotate_fn_sig(*def_id, substs.as_closure().sig());
|
||||
self.annotate_fn_sig(def_id, substs.as_closure().sig());
|
||||
debug!(
|
||||
"annotate_argument_and_return_for_borrow: \
|
||||
annotated_closure={:?} assigned_from_local={:?} \
|
||||
|
@ -817,6 +817,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
|
||||
&& let AggregateKind::Closure(def_id, _) | AggregateKind::Generator(def_id, _, _) = **kind
|
||||
{
|
||||
debug!("move_spans: def_id={:?} places={:?}", def_id, places);
|
||||
let def_id = def_id.expect_local();
|
||||
if let Some((args_span, generator_kind, capture_kind_span, path_span)) =
|
||||
self.closure_span(def_id, moved_place, places)
|
||||
{
|
||||
@ -945,6 +946,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
|
||||
box AggregateKind::Generator(def_id, _, _) => (def_id, true),
|
||||
_ => continue,
|
||||
};
|
||||
let def_id = def_id.expect_local();
|
||||
|
||||
debug!(
|
||||
"borrow_spans: def_id={:?} is_generator={:?} places={:?}",
|
||||
|
@ -1278,6 +1278,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
|
||||
// in order to populate our used_mut set.
|
||||
match **aggregate_kind {
|
||||
AggregateKind::Closure(def_id, _) | AggregateKind::Generator(def_id, _, _) => {
|
||||
let def_id = def_id.expect_local();
|
||||
let BorrowCheckResult { used_mut_upvars, .. } =
|
||||
self.infcx.tcx.mir_borrowck(def_id);
|
||||
debug!("{:?} used_mut_upvars={:?}", def_id, used_mut_upvars);
|
||||
|
@ -2536,7 +2536,7 @@ impl<'a, 'tcx> TypeChecker<'a, 'tcx> {
|
||||
// clauses on the struct.
|
||||
AggregateKind::Closure(def_id, substs)
|
||||
| AggregateKind::Generator(def_id, substs, _) => {
|
||||
(def_id.to_def_id(), self.prove_closure_bounds(tcx, def_id, substs, location))
|
||||
(def_id, self.prove_closure_bounds(tcx, def_id.expect_local(), substs, location))
|
||||
}
|
||||
|
||||
AggregateKind::Array(_) | AggregateKind::Tuple => {
|
||||
|
@ -13,6 +13,7 @@ use rustc_middle::ty::cast::{CastTy, IntTy};
|
||||
use rustc_middle::ty::layout::{HasTyCtxt, LayoutOf};
|
||||
use rustc_middle::ty::{self, adjustment::PointerCast, Instance, Ty, TyCtxt};
|
||||
use rustc_span::source_map::{Span, DUMMY_SP};
|
||||
use rustc_target::abi::VariantIdx;
|
||||
|
||||
impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
|
||||
#[instrument(level = "trace", skip(self, bx))]
|
||||
@ -106,17 +107,16 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
|
||||
}
|
||||
|
||||
mir::Rvalue::Aggregate(ref kind, ref operands) => {
|
||||
let (dest, active_field_index) = match **kind {
|
||||
mir::AggregateKind::Adt(adt_did, variant_index, _, _, active_field_index) => {
|
||||
dest.codegen_set_discr(bx, variant_index);
|
||||
if bx.tcx().adt_def(adt_did).is_enum() {
|
||||
(dest.project_downcast(bx, variant_index), active_field_index)
|
||||
} else {
|
||||
(dest, active_field_index)
|
||||
}
|
||||
let (variant_index, variant_dest, active_field_index) = match **kind {
|
||||
mir::AggregateKind::Adt(_, variant_index, _, _, active_field_index) => {
|
||||
let variant_dest = dest.project_downcast(bx, variant_index);
|
||||
(variant_index, variant_dest, active_field_index)
|
||||
}
|
||||
_ => (dest, None),
|
||||
_ => (VariantIdx::from_u32(0), dest, None),
|
||||
};
|
||||
if active_field_index.is_some() {
|
||||
assert_eq!(operands.len(), 1);
|
||||
}
|
||||
for (i, operand) in operands.iter().enumerate() {
|
||||
let op = self.codegen_operand(bx, operand);
|
||||
// Do not generate stores and GEPis for zero-sized fields.
|
||||
@ -124,13 +124,14 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
|
||||
let field_index = active_field_index.unwrap_or(i);
|
||||
let field = if let mir::AggregateKind::Array(_) = **kind {
|
||||
let llindex = bx.cx().const_usize(field_index as u64);
|
||||
dest.project_index(bx, llindex)
|
||||
variant_dest.project_index(bx, llindex)
|
||||
} else {
|
||||
dest.project_field(bx, field_index)
|
||||
variant_dest.project_field(bx, field_index)
|
||||
};
|
||||
op.val.store(bx, field);
|
||||
}
|
||||
}
|
||||
dest.codegen_set_discr(bx, variant_index);
|
||||
}
|
||||
|
||||
_ => {
|
||||
|
@ -774,15 +774,6 @@ where
|
||||
variant_index: VariantIdx,
|
||||
dest: &PlaceTy<'tcx, M::Provenance>,
|
||||
) -> InterpResult<'tcx> {
|
||||
// This must be an enum or generator.
|
||||
match dest.layout.ty.kind() {
|
||||
ty::Adt(adt, _) => assert!(adt.is_enum()),
|
||||
ty::Generator(..) => {}
|
||||
_ => span_bug!(
|
||||
self.cur_span(),
|
||||
"write_discriminant called on non-variant-type (neither enum nor generator)"
|
||||
),
|
||||
}
|
||||
// Layout computation excludes uninhabited variants from consideration
|
||||
// therefore there's no way to represent those variants in the given layout.
|
||||
// Essentially, uninhabited variants do not have a tag that corresponds to their
|
||||
@ -855,6 +846,34 @@ where
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Writes the discriminant of the given variant.
|
||||
#[instrument(skip(self), level = "debug")]
|
||||
pub fn write_aggregate(
|
||||
&mut self,
|
||||
kind: &mir::AggregateKind<'tcx>,
|
||||
operands: &[mir::Operand<'tcx>],
|
||||
dest: &PlaceTy<'tcx, M::Provenance>,
|
||||
) -> InterpResult<'tcx> {
|
||||
self.write_uninit(&dest)?;
|
||||
let (variant_index, variant_dest, active_field_index) = match *kind {
|
||||
mir::AggregateKind::Adt(_, variant_index, _, _, active_field_index) => {
|
||||
let variant_dest = self.place_downcast(&dest, variant_index)?;
|
||||
(variant_index, variant_dest, active_field_index)
|
||||
}
|
||||
_ => (VariantIdx::from_u32(0), dest.clone(), None),
|
||||
};
|
||||
if active_field_index.is_some() {
|
||||
assert_eq!(operands.len(), 1);
|
||||
}
|
||||
for (field_index, operand) in operands.iter().enumerate() {
|
||||
let field_index = active_field_index.unwrap_or(field_index);
|
||||
let field_dest = self.place_field(&variant_dest, field_index)?;
|
||||
let op = self.eval_operand(operand, Some(field_dest.layout))?;
|
||||
self.copy_op(&op, &field_dest, /*allow_transmute*/ false)?;
|
||||
}
|
||||
self.write_discriminant(variant_index, &dest)
|
||||
}
|
||||
|
||||
pub fn raw_const_to_mplace(
|
||||
&self,
|
||||
raw: ConstAlloc<'tcx>,
|
||||
|
@ -199,13 +199,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
||||
}
|
||||
|
||||
Aggregate(box ref kind, ref operands) => {
|
||||
assert!(matches!(kind, mir::AggregateKind::Array(..)));
|
||||
|
||||
for (field_index, operand) in operands.iter().enumerate() {
|
||||
let op = self.eval_operand(operand, None)?;
|
||||
let field_dest = self.place_field(&dest, field_index)?;
|
||||
self.copy_op(&op, &field_dest, /*allow_transmute*/ false)?;
|
||||
}
|
||||
self.write_aggregate(kind, operands, &dest)?;
|
||||
}
|
||||
|
||||
Repeat(ref operand, _) => {
|
||||
|
@ -453,7 +453,7 @@ impl<'tcx> Visitor<'tcx> for Checker<'_, 'tcx> {
|
||||
|
||||
Rvalue::Aggregate(kind, ..) => {
|
||||
if let AggregateKind::Generator(def_id, ..) = kind.as_ref()
|
||||
&& let Some(generator_kind @ hir::GeneratorKind::Async(..)) = self.tcx.generator_kind(def_id.to_def_id())
|
||||
&& let Some(generator_kind @ hir::GeneratorKind::Async(..)) = self.tcx.generator_kind(def_id)
|
||||
{
|
||||
self.check_op(ops::Generator(generator_kind));
|
||||
}
|
||||
|
@ -8,10 +8,10 @@ use rustc_middle::mir::interpret::Scalar;
|
||||
use rustc_middle::mir::visit::NonUseContext::VarDebugInfo;
|
||||
use rustc_middle::mir::visit::{PlaceContext, Visitor};
|
||||
use rustc_middle::mir::{
|
||||
traversal, AggregateKind, BasicBlock, BinOp, Body, BorrowKind, CastKind, CopyNonOverlapping,
|
||||
Local, Location, MirPass, MirPhase, NonDivergingIntrinsic, Operand, Place, PlaceElem, PlaceRef,
|
||||
ProjectionElem, RetagKind, RuntimePhase, Rvalue, SourceScope, Statement, StatementKind,
|
||||
Terminator, TerminatorKind, UnOp, START_BLOCK,
|
||||
traversal, BasicBlock, BinOp, Body, BorrowKind, CastKind, CopyNonOverlapping, Local, Location,
|
||||
MirPass, MirPhase, NonDivergingIntrinsic, Operand, Place, PlaceElem, PlaceRef, ProjectionElem,
|
||||
RetagKind, RuntimePhase, Rvalue, SourceScope, Statement, StatementKind, Terminator,
|
||||
TerminatorKind, UnOp, START_BLOCK,
|
||||
};
|
||||
use rustc_middle::ty::{self, InstanceDef, ParamEnv, Ty, TyCtxt};
|
||||
use rustc_mir_dataflow::impls::MaybeStorageLive;
|
||||
@ -423,19 +423,7 @@ impl<'a, 'tcx> Visitor<'tcx> for TypeChecker<'a, 'tcx> {
|
||||
};
|
||||
}
|
||||
match rvalue {
|
||||
Rvalue::Use(_) | Rvalue::CopyForDeref(_) => {}
|
||||
Rvalue::Aggregate(agg_kind, _) => {
|
||||
let disallowed = match **agg_kind {
|
||||
AggregateKind::Array(..) => false,
|
||||
_ => self.mir_phase >= MirPhase::Runtime(RuntimePhase::PostCleanup),
|
||||
};
|
||||
if disallowed {
|
||||
self.fail(
|
||||
location,
|
||||
format!("{:?} have been lowered to field assignments", rvalue),
|
||||
)
|
||||
}
|
||||
}
|
||||
Rvalue::Use(_) | Rvalue::CopyForDeref(_) | Rvalue::Aggregate(..) => {}
|
||||
Rvalue::Ref(_, BorrowKind::Shallow, _) => {
|
||||
if self.mir_phase >= MirPhase::Runtime(RuntimePhase::Initial) {
|
||||
self.fail(
|
||||
|
@ -1,77 +0,0 @@
|
||||
use rustc_index::vec::Idx;
|
||||
use rustc_middle::mir::*;
|
||||
use rustc_middle::ty::{Ty, TyCtxt};
|
||||
use rustc_target::abi::VariantIdx;
|
||||
|
||||
use std::iter::TrustedLen;
|
||||
|
||||
/// Expand `lhs = Rvalue::Aggregate(kind, operands)` into assignments to the fields.
|
||||
///
|
||||
/// Produces something like
|
||||
/// ```ignore (ilustrative)
|
||||
/// (lhs as Variant).field0 = arg0; // We only have a downcast if this is an enum
|
||||
/// (lhs as Variant).field1 = arg1;
|
||||
/// discriminant(lhs) = variant_index; // If lhs is an enum or generator.
|
||||
/// ```
|
||||
pub fn expand_aggregate<'tcx>(
|
||||
orig_lhs: Place<'tcx>,
|
||||
operands: impl Iterator<Item = (Operand<'tcx>, Ty<'tcx>)> + TrustedLen,
|
||||
kind: AggregateKind<'tcx>,
|
||||
source_info: SourceInfo,
|
||||
tcx: TyCtxt<'tcx>,
|
||||
) -> impl Iterator<Item = Statement<'tcx>> + TrustedLen {
|
||||
let mut lhs = orig_lhs;
|
||||
let mut set_discriminant = None;
|
||||
let active_field_index = match kind {
|
||||
AggregateKind::Adt(adt_did, variant_index, _, _, active_field_index) => {
|
||||
let adt_def = tcx.adt_def(adt_did);
|
||||
if adt_def.is_enum() {
|
||||
set_discriminant = Some(Statement {
|
||||
kind: StatementKind::SetDiscriminant {
|
||||
place: Box::new(orig_lhs),
|
||||
variant_index,
|
||||
},
|
||||
source_info,
|
||||
});
|
||||
lhs = tcx.mk_place_downcast(orig_lhs, adt_def, variant_index);
|
||||
}
|
||||
active_field_index
|
||||
}
|
||||
AggregateKind::Generator(..) => {
|
||||
// Right now we only support initializing generators to
|
||||
// variant 0 (Unresumed).
|
||||
let variant_index = VariantIdx::new(0);
|
||||
set_discriminant = Some(Statement {
|
||||
kind: StatementKind::SetDiscriminant { place: Box::new(orig_lhs), variant_index },
|
||||
source_info,
|
||||
});
|
||||
|
||||
// Operands are upvars stored on the base place, so no
|
||||
// downcast is necessary.
|
||||
|
||||
None
|
||||
}
|
||||
_ => None,
|
||||
};
|
||||
|
||||
let operands = operands.enumerate().map(move |(i, (op, ty))| {
|
||||
let lhs_field = if let AggregateKind::Array(_) = kind {
|
||||
let offset = u64::try_from(i).unwrap();
|
||||
tcx.mk_place_elem(
|
||||
lhs,
|
||||
ProjectionElem::ConstantIndex { offset, min_length: offset + 1, from_end: false },
|
||||
)
|
||||
} else {
|
||||
let field = Field::new(active_field_index.unwrap_or(i));
|
||||
tcx.mk_place_field(lhs, field, ty)
|
||||
};
|
||||
Statement {
|
||||
source_info,
|
||||
kind: StatementKind::Assign(Box::new((lhs_field, Rvalue::Use(op)))),
|
||||
}
|
||||
});
|
||||
[Statement { source_info, kind: StatementKind::Deinit(Box::new(orig_lhs)) }]
|
||||
.into_iter()
|
||||
.chain(operands)
|
||||
.chain(set_discriminant)
|
||||
}
|
@ -1,4 +1,3 @@
|
||||
pub mod aggregate;
|
||||
mod alignment;
|
||||
mod call_kind;
|
||||
pub mod collect_writes;
|
||||
@ -7,7 +6,6 @@ mod find_self_call;
|
||||
mod might_permit_raw_init;
|
||||
mod type_name;
|
||||
|
||||
pub use self::aggregate::expand_aggregate;
|
||||
pub use self::alignment::is_disaligned;
|
||||
pub use self::call_kind::{call_kind, CallDesugaringKind, CallKind};
|
||||
pub use self::compare_types::{is_equal_up_to_subtyping, is_subtype};
|
||||
|
@ -2098,10 +2098,7 @@ impl<'tcx> Debug for Rvalue<'tcx> {
|
||||
AggregateKind::Closure(def_id, substs) => ty::tls::with(|tcx| {
|
||||
let name = if tcx.sess.opts.unstable_opts.span_free_formats {
|
||||
let substs = tcx.lift(substs).unwrap();
|
||||
format!(
|
||||
"[closure@{}]",
|
||||
tcx.def_path_str_with_substs(def_id.to_def_id(), substs),
|
||||
)
|
||||
format!("[closure@{}]", tcx.def_path_str_with_substs(def_id, substs),)
|
||||
} else {
|
||||
let span = tcx.def_span(def_id);
|
||||
format!(
|
||||
@ -2112,11 +2109,17 @@ impl<'tcx> Debug for Rvalue<'tcx> {
|
||||
let mut struct_fmt = fmt.debug_struct(&name);
|
||||
|
||||
// FIXME(project-rfc-2229#48): This should be a list of capture names/places
|
||||
if let Some(upvars) = tcx.upvars_mentioned(def_id) {
|
||||
if let Some(def_id) = def_id.as_local()
|
||||
&& let Some(upvars) = tcx.upvars_mentioned(def_id)
|
||||
{
|
||||
for (&var_id, place) in iter::zip(upvars.keys(), places) {
|
||||
let var_name = tcx.hir().name(var_id);
|
||||
struct_fmt.field(var_name.as_str(), place);
|
||||
}
|
||||
} else {
|
||||
for (index, place) in places.iter().enumerate() {
|
||||
struct_fmt.field(&format!("{index}"), place);
|
||||
}
|
||||
}
|
||||
|
||||
struct_fmt.finish()
|
||||
@ -2127,11 +2130,17 @@ impl<'tcx> Debug for Rvalue<'tcx> {
|
||||
let mut struct_fmt = fmt.debug_struct(&name);
|
||||
|
||||
// FIXME(project-rfc-2229#48): This should be a list of capture names/places
|
||||
if let Some(upvars) = tcx.upvars_mentioned(def_id) {
|
||||
if let Some(def_id) = def_id.as_local()
|
||||
&& let Some(upvars) = tcx.upvars_mentioned(def_id)
|
||||
{
|
||||
for (&var_id, place) in iter::zip(upvars.keys(), places) {
|
||||
let var_name = tcx.hir().name(var_id);
|
||||
struct_fmt.field(var_name.as_str(), place);
|
||||
}
|
||||
} else {
|
||||
for (index, place) in places.iter().enumerate() {
|
||||
struct_fmt.field(&format!("{index}"), place);
|
||||
}
|
||||
}
|
||||
|
||||
struct_fmt.finish()
|
||||
|
@ -1203,10 +1203,8 @@ pub enum AggregateKind<'tcx> {
|
||||
/// active field index would identity the field `c`
|
||||
Adt(DefId, VariantIdx, SubstsRef<'tcx>, Option<UserTypeAnnotationIndex>, Option<usize>),
|
||||
|
||||
// Note: We can use LocalDefId since closures and generators a deaggregated
|
||||
// before codegen.
|
||||
Closure(LocalDefId, SubstsRef<'tcx>),
|
||||
Generator(LocalDefId, SubstsRef<'tcx>, hir::Movability),
|
||||
Closure(DefId, SubstsRef<'tcx>),
|
||||
Generator(DefId, SubstsRef<'tcx>, hir::Movability),
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, TyEncodable, TyDecodable, Hash, HashStable)]
|
||||
|
@ -205,9 +205,9 @@ impl<'tcx> Rvalue<'tcx> {
|
||||
AggregateKind::Adt(did, _, substs, _, _) => {
|
||||
tcx.bound_type_of(did).subst(tcx, substs)
|
||||
}
|
||||
AggregateKind::Closure(did, substs) => tcx.mk_closure(did.to_def_id(), substs),
|
||||
AggregateKind::Closure(did, substs) => tcx.mk_closure(did, substs),
|
||||
AggregateKind::Generator(did, substs, movability) => {
|
||||
tcx.mk_generator(did.to_def_id(), substs, movability)
|
||||
tcx.mk_generator(did, substs, movability)
|
||||
}
|
||||
},
|
||||
Rvalue::ShallowInitBox(_, ty) => tcx.mk_box(ty),
|
||||
|
@ -439,10 +439,14 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||
// We implicitly set the discriminant to 0. See
|
||||
// librustc_mir/transform/deaggregator.rs for details.
|
||||
let movability = movability.unwrap();
|
||||
Box::new(AggregateKind::Generator(closure_id, substs, movability))
|
||||
Box::new(AggregateKind::Generator(
|
||||
closure_id.to_def_id(),
|
||||
substs,
|
||||
movability,
|
||||
))
|
||||
}
|
||||
UpvarSubsts::Closure(substs) => {
|
||||
Box::new(AggregateKind::Closure(closure_id, substs))
|
||||
Box::new(AggregateKind::Closure(closure_id.to_def_id(), substs))
|
||||
}
|
||||
};
|
||||
block.and(Rvalue::Aggregate(result, operands))
|
||||
|
@ -126,6 +126,7 @@ impl<'tcx> Visitor<'tcx> for UnsafetyChecker<'_, 'tcx> {
|
||||
}
|
||||
}
|
||||
&AggregateKind::Closure(def_id, _) | &AggregateKind::Generator(def_id, _, _) => {
|
||||
let def_id = def_id.expect_local();
|
||||
let UnsafetyCheckResult { violations, used_unsafe_blocks, .. } =
|
||||
self.tcx.unsafety_check_result(def_id);
|
||||
self.register_violations(violations, used_unsafe_blocks.iter().copied());
|
||||
|
@ -5,6 +5,7 @@
|
||||
use rustc_const_eval::const_eval::CheckAlignment;
|
||||
use rustc_const_eval::interpret::{ConstValue, ImmTy, Immediate, InterpCx, Scalar};
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_hir::def::DefKind;
|
||||
use rustc_middle::mir::visit::{MutVisitor, Visitor};
|
||||
use rustc_middle::mir::*;
|
||||
use rustc_middle::ty::{self, Ty, TyCtxt};
|
||||
@ -85,6 +86,30 @@ impl<'tcx> ValueAnalysis<'tcx> for ConstAnalysis<'tcx> {
|
||||
state: &mut State<Self::Value>,
|
||||
) {
|
||||
match rvalue {
|
||||
Rvalue::Aggregate(kind, operands) => {
|
||||
let target = self.map().find(target.as_ref());
|
||||
if let Some(target) = target {
|
||||
state.flood_idx_with(target, self.map(), FlatSet::Bottom);
|
||||
let field_based = match **kind {
|
||||
AggregateKind::Tuple | AggregateKind::Closure(..) => true,
|
||||
AggregateKind::Adt(def_id, ..) => {
|
||||
matches!(self.tcx.def_kind(def_id), DefKind::Struct)
|
||||
}
|
||||
_ => false,
|
||||
};
|
||||
if field_based {
|
||||
for (field_index, operand) in operands.iter().enumerate() {
|
||||
if let Some(field) = self
|
||||
.map()
|
||||
.apply(target, TrackElem::Field(Field::from_usize(field_index)))
|
||||
{
|
||||
let result = self.handle_operand(operand, state);
|
||||
state.assign_idx(field, result, self.map());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Rvalue::CheckedBinaryOp(op, box (left, right)) => {
|
||||
let target = self.map().find(target.as_ref());
|
||||
if let Some(target) = target {
|
||||
|
@ -1,45 +0,0 @@
|
||||
use crate::util::expand_aggregate;
|
||||
use crate::MirPass;
|
||||
use rustc_middle::mir::*;
|
||||
use rustc_middle::ty::TyCtxt;
|
||||
|
||||
pub struct Deaggregator;
|
||||
|
||||
impl<'tcx> MirPass<'tcx> for Deaggregator {
|
||||
fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
|
||||
let basic_blocks = body.basic_blocks.as_mut_preserves_cfg();
|
||||
for bb in basic_blocks {
|
||||
bb.expand_statements(|stmt| {
|
||||
// FIXME(eddyb) don't match twice on `stmt.kind` (post-NLL).
|
||||
match stmt.kind {
|
||||
// FIXME(#48193) Deaggregate arrays when it's cheaper to do so.
|
||||
StatementKind::Assign(box (
|
||||
_,
|
||||
Rvalue::Aggregate(box AggregateKind::Array(_), _),
|
||||
)) => {
|
||||
return None;
|
||||
}
|
||||
StatementKind::Assign(box (_, Rvalue::Aggregate(_, _))) => {}
|
||||
_ => return None,
|
||||
}
|
||||
|
||||
let stmt = stmt.replace_nop();
|
||||
let source_info = stmt.source_info;
|
||||
let StatementKind::Assign(box (lhs, Rvalue::Aggregate(kind, operands))) = stmt.kind else {
|
||||
bug!();
|
||||
};
|
||||
|
||||
Some(expand_aggregate(
|
||||
lhs,
|
||||
operands.into_iter().map(|op| {
|
||||
let ty = op.ty(&body.local_decls, tcx);
|
||||
(op, ty)
|
||||
}),
|
||||
*kind,
|
||||
source_info,
|
||||
tcx,
|
||||
))
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
@ -52,7 +52,6 @@
|
||||
|
||||
use crate::deref_separator::deref_finder;
|
||||
use crate::simplify;
|
||||
use crate::util::expand_aggregate;
|
||||
use crate::MirPass;
|
||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
||||
use rustc_errors::pluralize;
|
||||
@ -272,31 +271,26 @@ impl<'tcx> TransformVisitor<'tcx> {
|
||||
assert_eq!(self.state_adt_ref.variant(idx).fields.len(), 0);
|
||||
|
||||
// FIXME(swatinem): assert that `val` is indeed unit?
|
||||
statements.extend(expand_aggregate(
|
||||
Place::return_place(),
|
||||
std::iter::empty(),
|
||||
kind,
|
||||
statements.push(Statement {
|
||||
kind: StatementKind::Assign(Box::new((
|
||||
Place::return_place(),
|
||||
Rvalue::Aggregate(Box::new(kind), vec![]),
|
||||
))),
|
||||
source_info,
|
||||
self.tcx,
|
||||
));
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// else: `Poll::Ready(x)`, `GeneratorState::Yielded(x)` or `GeneratorState::Complete(x)`
|
||||
assert_eq!(self.state_adt_ref.variant(idx).fields.len(), 1);
|
||||
|
||||
let ty = self
|
||||
.tcx
|
||||
.bound_type_of(self.state_adt_ref.variant(idx).fields[0].did)
|
||||
.subst(self.tcx, self.state_substs);
|
||||
|
||||
statements.extend(expand_aggregate(
|
||||
Place::return_place(),
|
||||
std::iter::once((val, ty)),
|
||||
kind,
|
||||
statements.push(Statement {
|
||||
kind: StatementKind::Assign(Box::new((
|
||||
Place::return_place(),
|
||||
Rvalue::Aggregate(Box::new(kind), vec![val]),
|
||||
))),
|
||||
source_info,
|
||||
self.tcx,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
// Create a Place referencing a generator struct field
|
||||
|
@ -60,7 +60,6 @@ mod coverage;
|
||||
mod ctfe_limit;
|
||||
mod dataflow_const_prop;
|
||||
mod dead_store_elimination;
|
||||
mod deaggregator;
|
||||
mod deduce_param_attrs;
|
||||
mod deduplicate_blocks;
|
||||
mod deref_separator;
|
||||
@ -523,9 +522,6 @@ fn run_runtime_lowering_passes<'tcx>(tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
|
||||
&elaborate_box_derefs::ElaborateBoxDerefs,
|
||||
&generator::StateTransform,
|
||||
&add_retag::AddRetag,
|
||||
// Deaggregator is necessary for const prop. We may want to consider implementing
|
||||
// CTFE support for aggregates.
|
||||
&deaggregator::Deaggregator,
|
||||
&Lint(const_prop_lint::ConstProp),
|
||||
];
|
||||
pm::run_passes_no_validate(tcx, body, passes, Some(MirPhase::Runtime(RuntimePhase::Initial)));
|
||||
|
@ -15,7 +15,6 @@ use rustc_target::spec::abi::Abi;
|
||||
use std::fmt;
|
||||
use std::iter;
|
||||
|
||||
use crate::util::expand_aggregate;
|
||||
use crate::{
|
||||
abort_unwinding_calls, add_call_guards, add_moves_for_packed_drops, deref_separator,
|
||||
pass_manager as pm, remove_noop_landing_pads, simplify,
|
||||
@ -831,19 +830,23 @@ pub fn build_adt_ctor(tcx: TyCtxt<'_>, ctor_id: DefId) -> Body<'_> {
|
||||
// return;
|
||||
debug!("build_ctor: variant_index={:?}", variant_index);
|
||||
|
||||
let statements = expand_aggregate(
|
||||
Place::return_place(),
|
||||
adt_def.variant(variant_index).fields.iter().enumerate().map(|(idx, field_def)| {
|
||||
(Operand::Move(Place::from(Local::new(idx + 1))), field_def.ty(tcx, substs))
|
||||
}),
|
||||
AggregateKind::Adt(adt_def.did(), variant_index, substs, None, None),
|
||||
let kind = AggregateKind::Adt(adt_def.did(), variant_index, substs, None, None);
|
||||
let variant = adt_def.variant(variant_index);
|
||||
let statement = Statement {
|
||||
kind: StatementKind::Assign(Box::new((
|
||||
Place::return_place(),
|
||||
Rvalue::Aggregate(
|
||||
Box::new(kind),
|
||||
(0..variant.fields.len())
|
||||
.map(|idx| Operand::Move(Place::from(Local::new(idx + 1))))
|
||||
.collect(),
|
||||
),
|
||||
))),
|
||||
source_info,
|
||||
tcx,
|
||||
)
|
||||
.collect();
|
||||
};
|
||||
|
||||
let start_block = BasicBlockData {
|
||||
statements,
|
||||
statements: vec![statement],
|
||||
terminator: Some(Terminator { source_info, kind: TerminatorKind::Return }),
|
||||
is_cleanup: false,
|
||||
};
|
||||
|
@ -24,9 +24,7 @@ fn a::{closure#0}(_1: Pin<&mut [async fn body@$DIR/async_await.rs:11:14: 11:16]>
|
||||
bb1: {
|
||||
_4 = move _2; // scope 0 at $DIR/async_await.rs:+0:14: +0:16
|
||||
_3 = const (); // scope 0 at $DIR/async_await.rs:+0:14: +0:16
|
||||
Deinit(_0); // scope 0 at $DIR/async_await.rs:+0:16: +0:16
|
||||
((_0 as Ready).0: ()) = move _3; // scope 0 at $DIR/async_await.rs:+0:16: +0:16
|
||||
discriminant(_0) = 0; // scope 0 at $DIR/async_await.rs:+0:16: +0:16
|
||||
_0 = Poll::<()>::Ready(move _3); // scope 0 at $DIR/async_await.rs:+0:16: +0:16
|
||||
discriminant((*(_1.0: &mut [async fn body@$DIR/async_await.rs:11:14: 11:16]))) = 1; // scope 0 at $DIR/async_await.rs:+0:16: +0:16
|
||||
return; // scope 0 at $DIR/async_await.rs:+0:16: +0:16
|
||||
}
|
||||
|
@ -167,8 +167,7 @@ fn b::{closure#0}(_1: Pin<&mut [async fn body@$DIR/async_await.rs:14:18: 17:2]>,
|
||||
StorageLive(_19); // scope 1 at $DIR/async_await.rs:+1:8: +1:14
|
||||
StorageLive(_20); // scope 1 at $DIR/async_await.rs:+1:8: +1:14
|
||||
_20 = (); // scope 1 at $DIR/async_await.rs:+1:8: +1:14
|
||||
Deinit(_0); // scope 1 at $DIR/async_await.rs:+1:8: +1:14
|
||||
discriminant(_0) = 1; // scope 1 at $DIR/async_await.rs:+1:8: +1:14
|
||||
_0 = Poll::<()>::Pending; // scope 1 at $DIR/async_await.rs:+1:8: +1:14
|
||||
discriminant((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2]))) = 3; // scope 1 at $DIR/async_await.rs:+1:8: +1:14
|
||||
return; // scope 1 at $DIR/async_await.rs:+1:8: +1:14
|
||||
}
|
||||
@ -276,8 +275,7 @@ fn b::{closure#0}(_1: Pin<&mut [async fn body@$DIR/async_await.rs:14:18: 17:2]>,
|
||||
StorageLive(_35); // scope 4 at $DIR/async_await.rs:+2:8: +2:14
|
||||
StorageLive(_36); // scope 4 at $DIR/async_await.rs:+2:8: +2:14
|
||||
_36 = (); // scope 4 at $DIR/async_await.rs:+2:8: +2:14
|
||||
Deinit(_0); // scope 4 at $DIR/async_await.rs:+2:8: +2:14
|
||||
discriminant(_0) = 1; // scope 4 at $DIR/async_await.rs:+2:8: +2:14
|
||||
_0 = Poll::<()>::Pending; // scope 4 at $DIR/async_await.rs:+2:8: +2:14
|
||||
discriminant((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2]))) = 4; // scope 4 at $DIR/async_await.rs:+2:8: +2:14
|
||||
return; // scope 4 at $DIR/async_await.rs:+2:8: +2:14
|
||||
}
|
||||
@ -317,9 +315,7 @@ fn b::{closure#0}(_1: Pin<&mut [async fn body@$DIR/async_await.rs:14:18: 17:2]>,
|
||||
}
|
||||
|
||||
bb26: {
|
||||
Deinit(_0); // scope 0 at $DIR/async_await.rs:+3:2: +3:2
|
||||
((_0 as Ready).0: ()) = move _37; // scope 0 at $DIR/async_await.rs:+3:2: +3:2
|
||||
discriminant(_0) = 0; // scope 0 at $DIR/async_await.rs:+3:2: +3:2
|
||||
_0 = Poll::<()>::Ready(move _37); // scope 0 at $DIR/async_await.rs:+3:2: +3:2
|
||||
discriminant((*(_1.0: &mut [async fn body@$DIR/async_await.rs:14:18: 17:2]))) = 1; // scope 0 at $DIR/async_await.rs:+3:2: +3:2
|
||||
return; // scope 0 at $DIR/async_await.rs:+3:2: +3:2
|
||||
}
|
||||
|
@ -61,10 +61,7 @@
|
||||
|
||||
bb3: {
|
||||
StorageDead(_9); // scope 0 at $DIR/combine_clone_of_primitives.rs:10:15: 10:16
|
||||
Deinit(_0); // scope 0 at $DIR/combine_clone_of_primitives.rs:+0:10: +0:15
|
||||
(_0.0: T) = move _2; // scope 0 at $DIR/combine_clone_of_primitives.rs:+0:10: +0:15
|
||||
(_0.1: u64) = move _5; // scope 0 at $DIR/combine_clone_of_primitives.rs:+0:10: +0:15
|
||||
(_0.2: [f32; 3]) = move _8; // scope 0 at $DIR/combine_clone_of_primitives.rs:+0:10: +0:15
|
||||
_0 = MyThing::<T> { v: move _2, i: move _5, a: move _8 }; // scope 0 at $DIR/combine_clone_of_primitives.rs:+0:10: +0:15
|
||||
StorageDead(_8); // scope 0 at $DIR/combine_clone_of_primitives.rs:+0:14: +0:15
|
||||
StorageDead(_5); // scope 0 at $DIR/combine_clone_of_primitives.rs:+0:14: +0:15
|
||||
StorageDead(_2); // scope 0 at $DIR/combine_clone_of_primitives.rs:+0:14: +0:15
|
||||
|
@ -26,17 +26,17 @@ alloc1 (static: FOO, size: 8, align: 4) {
|
||||
|
||||
alloc18 (size: 48, align: 4) {
|
||||
0x00 │ 00 00 00 00 __ __ __ __ ╾─alloc5──╼ 00 00 00 00 │ ....░░░░╾──╼....
|
||||
0x10 │ 00 00 00 00 __ __ __ __ ╾─alloc9──╼ 02 00 00 00 │ ....░░░░╾──╼....
|
||||
0x20 │ 01 00 00 00 2a 00 00 00 ╾─alloc14─╼ 03 00 00 00 │ ....*...╾──╼....
|
||||
0x10 │ 00 00 00 00 __ __ __ __ ╾─alloc8──╼ 02 00 00 00 │ ....░░░░╾──╼....
|
||||
0x20 │ 01 00 00 00 2a 00 00 00 ╾─alloc13─╼ 03 00 00 00 │ ....*...╾──╼....
|
||||
}
|
||||
|
||||
alloc5 (size: 0, align: 4) {}
|
||||
|
||||
alloc9 (size: 16, align: 4) {
|
||||
╾─alloc8──╼ 03 00 00 00 ╾─alloc10─╼ 03 00 00 00 │ ╾──╼....╾──╼....
|
||||
alloc8 (size: 16, align: 4) {
|
||||
╾─alloc9──╼ 03 00 00 00 ╾─alloc10─╼ 03 00 00 00 │ ╾──╼....╾──╼....
|
||||
}
|
||||
|
||||
alloc8 (size: 3, align: 1) {
|
||||
alloc9 (size: 3, align: 1) {
|
||||
66 6f 6f │ foo
|
||||
}
|
||||
|
||||
@ -44,12 +44,12 @@ alloc10 (size: 3, align: 1) {
|
||||
62 61 72 │ bar
|
||||
}
|
||||
|
||||
alloc14 (size: 24, align: 4) {
|
||||
0x00 │ ╾─alloc13─╼ 03 00 00 00 ╾─alloc15─╼ 03 00 00 00 │ ╾──╼....╾──╼....
|
||||
alloc13 (size: 24, align: 4) {
|
||||
0x00 │ ╾─alloc14─╼ 03 00 00 00 ╾─alloc15─╼ 03 00 00 00 │ ╾──╼....╾──╼....
|
||||
0x10 │ ╾─alloc16─╼ 04 00 00 00 │ ╾──╼....
|
||||
}
|
||||
|
||||
alloc13 (size: 3, align: 1) {
|
||||
alloc14 (size: 3, align: 1) {
|
||||
6d 65 68 │ meh
|
||||
}
|
||||
|
||||
|
@ -27,19 +27,19 @@ alloc1 (static: FOO, size: 16, align: 8) {
|
||||
alloc18 (size: 72, align: 8) {
|
||||
0x00 │ 00 00 00 00 __ __ __ __ ╾───────alloc5────────╼ │ ....░░░░╾──────╼
|
||||
0x10 │ 00 00 00 00 00 00 00 00 00 00 00 00 __ __ __ __ │ ............░░░░
|
||||
0x20 │ ╾───────alloc9────────╼ 02 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
0x30 │ 01 00 00 00 2a 00 00 00 ╾───────alloc14───────╼ │ ....*...╾──────╼
|
||||
0x20 │ ╾───────alloc8────────╼ 02 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
0x30 │ 01 00 00 00 2a 00 00 00 ╾───────alloc13───────╼ │ ....*...╾──────╼
|
||||
0x40 │ 03 00 00 00 00 00 00 00 │ ........
|
||||
}
|
||||
|
||||
alloc5 (size: 0, align: 8) {}
|
||||
|
||||
alloc9 (size: 32, align: 8) {
|
||||
0x00 │ ╾───────alloc8────────╼ 03 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
alloc8 (size: 32, align: 8) {
|
||||
0x00 │ ╾───────alloc9────────╼ 03 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
0x10 │ ╾───────alloc10───────╼ 03 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
}
|
||||
|
||||
alloc8 (size: 3, align: 1) {
|
||||
alloc9 (size: 3, align: 1) {
|
||||
66 6f 6f │ foo
|
||||
}
|
||||
|
||||
@ -47,13 +47,13 @@ alloc10 (size: 3, align: 1) {
|
||||
62 61 72 │ bar
|
||||
}
|
||||
|
||||
alloc14 (size: 48, align: 8) {
|
||||
0x00 │ ╾───────alloc13───────╼ 03 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
alloc13 (size: 48, align: 8) {
|
||||
0x00 │ ╾───────alloc14───────╼ 03 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
0x10 │ ╾───────alloc15───────╼ 03 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
0x20 │ ╾───────alloc16───────╼ 04 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
}
|
||||
|
||||
alloc13 (size: 3, align: 1) {
|
||||
alloc14 (size: 3, align: 1) {
|
||||
6d 65 68 │ meh
|
||||
}
|
||||
|
||||
|
@ -8,8 +8,8 @@
|
||||
let mut _6: u8; // in scope 0 at $DIR/const_debuginfo.rs:+4:15: +4:16
|
||||
let mut _7: u8; // in scope 0 at $DIR/const_debuginfo.rs:+4:19: +4:20
|
||||
let mut _8: u8; // in scope 0 at $DIR/const_debuginfo.rs:+4:23: +4:24
|
||||
let mut _12: u32; // in scope 0 at $DIR/const_debuginfo.rs:+13:13: +13:16
|
||||
let mut _13: u32; // in scope 0 at $DIR/const_debuginfo.rs:+13:19: +13:22
|
||||
let mut _14: u32; // in scope 0 at $DIR/const_debuginfo.rs:+13:13: +13:16
|
||||
let mut _15: u32; // in scope 0 at $DIR/const_debuginfo.rs:+13:19: +13:22
|
||||
scope 1 {
|
||||
- debug x => _1; // in scope 1 at $DIR/const_debuginfo.rs:+1:9: +1:10
|
||||
+ debug x => const 1_u8; // in scope 1 at $DIR/const_debuginfo.rs:+1:9: +1:10
|
||||
@ -29,21 +29,18 @@
|
||||
scope 5 {
|
||||
- debug s => _9; // in scope 5 at $DIR/const_debuginfo.rs:+6:9: +6:10
|
||||
+ debug s => const "hello, world!"; // in scope 5 at $DIR/const_debuginfo.rs:+6:9: +6:10
|
||||
let _14: bool; // in scope 5 at $DIR/const_debuginfo.rs:+8:9: +8:10
|
||||
let _15: bool; // in scope 5 at $DIR/const_debuginfo.rs:+8:9: +8:10
|
||||
let _16: u32; // in scope 5 at $DIR/const_debuginfo.rs:+8:9: +8:10
|
||||
let _10: (bool, bool, u32); // in scope 5 at $DIR/const_debuginfo.rs:+8:9: +8:10
|
||||
scope 6 {
|
||||
debug f => (bool, bool, u32){ .0 => _14, .1 => _15, .2 => _16, }; // in scope 6 at $DIR/const_debuginfo.rs:+8:9: +8:10
|
||||
let _10: std::option::Option<u16>; // in scope 6 at $DIR/const_debuginfo.rs:+10:9: +10:10
|
||||
debug f => _10; // in scope 6 at $DIR/const_debuginfo.rs:+8:9: +8:10
|
||||
let _11: std::option::Option<u16>; // in scope 6 at $DIR/const_debuginfo.rs:+10:9: +10:10
|
||||
scope 7 {
|
||||
debug o => _10; // in scope 7 at $DIR/const_debuginfo.rs:+10:9: +10:10
|
||||
let _17: u32; // in scope 7 at $DIR/const_debuginfo.rs:+12:9: +12:10
|
||||
let _18: u32; // in scope 7 at $DIR/const_debuginfo.rs:+12:9: +12:10
|
||||
debug o => _11; // in scope 7 at $DIR/const_debuginfo.rs:+10:9: +10:10
|
||||
let _12: Point; // in scope 7 at $DIR/const_debuginfo.rs:+12:9: +12:10
|
||||
scope 8 {
|
||||
debug p => Point{ .0 => _17, .1 => _18, }; // in scope 8 at $DIR/const_debuginfo.rs:+12:9: +12:10
|
||||
let _11: u32; // in scope 8 at $DIR/const_debuginfo.rs:+13:9: +13:10
|
||||
debug p => _12; // in scope 8 at $DIR/const_debuginfo.rs:+12:9: +12:10
|
||||
let _13: u32; // in scope 8 at $DIR/const_debuginfo.rs:+13:9: +13:10
|
||||
scope 9 {
|
||||
- debug a => _11; // in scope 9 at $DIR/const_debuginfo.rs:+13:9: +13:10
|
||||
- debug a => _13; // in scope 9 at $DIR/const_debuginfo.rs:+13:9: +13:10
|
||||
+ debug a => const 64_u32; // in scope 9 at $DIR/const_debuginfo.rs:+13:9: +13:10
|
||||
}
|
||||
}
|
||||
@ -69,40 +66,24 @@
|
||||
// mir::Constant
|
||||
// + span: $DIR/const_debuginfo.rs:14:13: 14:28
|
||||
// + literal: Const { ty: &str, val: Value(Slice(..)) }
|
||||
StorageLive(_14); // scope 5 at $DIR/const_debuginfo.rs:+8:9: +8:10
|
||||
StorageLive(_15); // scope 5 at $DIR/const_debuginfo.rs:+8:9: +8:10
|
||||
StorageLive(_16); // scope 5 at $DIR/const_debuginfo.rs:+8:9: +8:10
|
||||
Deinit(_14); // scope 5 at $DIR/const_debuginfo.rs:+8:13: +8:34
|
||||
Deinit(_15); // scope 5 at $DIR/const_debuginfo.rs:+8:13: +8:34
|
||||
Deinit(_16); // scope 5 at $DIR/const_debuginfo.rs:+8:13: +8:34
|
||||
_14 = const true; // scope 5 at $DIR/const_debuginfo.rs:+8:13: +8:34
|
||||
_15 = const false; // scope 5 at $DIR/const_debuginfo.rs:+8:13: +8:34
|
||||
_16 = const 123_u32; // scope 5 at $DIR/const_debuginfo.rs:+8:13: +8:34
|
||||
StorageLive(_10); // scope 6 at $DIR/const_debuginfo.rs:+10:9: +10:10
|
||||
Deinit(_10); // scope 6 at $DIR/const_debuginfo.rs:+10:13: +10:24
|
||||
((_10 as Some).0: u16) = const 99_u16; // scope 6 at $DIR/const_debuginfo.rs:+10:13: +10:24
|
||||
discriminant(_10) = 1; // scope 6 at $DIR/const_debuginfo.rs:+10:13: +10:24
|
||||
StorageLive(_17); // scope 7 at $DIR/const_debuginfo.rs:+12:9: +12:10
|
||||
StorageLive(_18); // scope 7 at $DIR/const_debuginfo.rs:+12:9: +12:10
|
||||
Deinit(_17); // scope 7 at $DIR/const_debuginfo.rs:+12:13: +12:35
|
||||
Deinit(_18); // scope 7 at $DIR/const_debuginfo.rs:+12:13: +12:35
|
||||
_17 = const 32_u32; // scope 7 at $DIR/const_debuginfo.rs:+12:13: +12:35
|
||||
_18 = const 32_u32; // scope 7 at $DIR/const_debuginfo.rs:+12:13: +12:35
|
||||
StorageLive(_11); // scope 8 at $DIR/const_debuginfo.rs:+13:9: +13:10
|
||||
StorageLive(_12); // scope 8 at $DIR/const_debuginfo.rs:+13:13: +13:16
|
||||
_12 = const 32_u32; // scope 8 at $DIR/const_debuginfo.rs:+13:13: +13:16
|
||||
StorageLive(_13); // scope 8 at $DIR/const_debuginfo.rs:+13:19: +13:22
|
||||
_13 = const 32_u32; // scope 8 at $DIR/const_debuginfo.rs:+13:19: +13:22
|
||||
_11 = const 64_u32; // scope 8 at $DIR/const_debuginfo.rs:+13:13: +13:22
|
||||
StorageDead(_13); // scope 8 at $DIR/const_debuginfo.rs:+13:21: +13:22
|
||||
StorageDead(_12); // scope 8 at $DIR/const_debuginfo.rs:+13:21: +13:22
|
||||
StorageDead(_11); // scope 8 at $DIR/const_debuginfo.rs:+14:1: +14:2
|
||||
StorageDead(_17); // scope 7 at $DIR/const_debuginfo.rs:+14:1: +14:2
|
||||
StorageDead(_18); // scope 7 at $DIR/const_debuginfo.rs:+14:1: +14:2
|
||||
StorageDead(_10); // scope 6 at $DIR/const_debuginfo.rs:+14:1: +14:2
|
||||
StorageDead(_14); // scope 5 at $DIR/const_debuginfo.rs:+14:1: +14:2
|
||||
StorageDead(_15); // scope 5 at $DIR/const_debuginfo.rs:+14:1: +14:2
|
||||
StorageDead(_16); // scope 5 at $DIR/const_debuginfo.rs:+14:1: +14:2
|
||||
StorageLive(_10); // scope 5 at $DIR/const_debuginfo.rs:+8:9: +8:10
|
||||
_10 = (const true, const false, const 123_u32); // scope 5 at $DIR/const_debuginfo.rs:+8:13: +8:34
|
||||
StorageLive(_11); // scope 6 at $DIR/const_debuginfo.rs:+10:9: +10:10
|
||||
_11 = Option::<u16>::Some(const 99_u16); // scope 6 at $DIR/const_debuginfo.rs:+10:13: +10:24
|
||||
StorageLive(_12); // scope 7 at $DIR/const_debuginfo.rs:+12:9: +12:10
|
||||
_12 = Point { x: const 32_u32, y: const 32_u32 }; // scope 7 at $DIR/const_debuginfo.rs:+12:13: +12:35
|
||||
StorageLive(_13); // scope 8 at $DIR/const_debuginfo.rs:+13:9: +13:10
|
||||
StorageLive(_14); // scope 8 at $DIR/const_debuginfo.rs:+13:13: +13:16
|
||||
_14 = const 32_u32; // scope 8 at $DIR/const_debuginfo.rs:+13:13: +13:16
|
||||
StorageLive(_15); // scope 8 at $DIR/const_debuginfo.rs:+13:19: +13:22
|
||||
_15 = const 32_u32; // scope 8 at $DIR/const_debuginfo.rs:+13:19: +13:22
|
||||
_13 = const 64_u32; // scope 8 at $DIR/const_debuginfo.rs:+13:13: +13:22
|
||||
StorageDead(_15); // scope 8 at $DIR/const_debuginfo.rs:+13:21: +13:22
|
||||
StorageDead(_14); // scope 8 at $DIR/const_debuginfo.rs:+13:21: +13:22
|
||||
StorageDead(_13); // scope 8 at $DIR/const_debuginfo.rs:+14:1: +14:2
|
||||
StorageDead(_12); // scope 7 at $DIR/const_debuginfo.rs:+14:1: +14:2
|
||||
StorageDead(_11); // scope 6 at $DIR/const_debuginfo.rs:+14:1: +14:2
|
||||
StorageDead(_10); // scope 5 at $DIR/const_debuginfo.rs:+14:1: +14:2
|
||||
StorageDead(_9); // scope 4 at $DIR/const_debuginfo.rs:+14:1: +14:2
|
||||
StorageDead(_4); // scope 3 at $DIR/const_debuginfo.rs:+14:1: +14:2
|
||||
return; // scope 0 at $DIR/const_debuginfo.rs:+14:2: +14:2
|
||||
|
@ -17,7 +17,7 @@
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/const_goto_storage.rs:+1:9: +1:12
|
||||
- StorageLive(_2); // scope 0 at $DIR/const_goto_storage.rs:+1:21: +1:23
|
||||
- Deinit(_2); // scope 0 at $DIR/const_goto_storage.rs:+1:21: +1:23
|
||||
- _2 = (); // scope 0 at $DIR/const_goto_storage.rs:+1:21: +1:23
|
||||
- StorageLive(_3); // scope 0 at $DIR/const_goto_storage.rs:+2:15: +6:10
|
||||
- StorageLive(_4); // scope 0 at $DIR/const_goto_storage.rs:+2:18: +2:76
|
||||
- StorageLive(_5); // scope 0 at $DIR/const_goto_storage.rs:+2:21: +2:52
|
||||
|
55
tests/mir-opt/const_prop/aggregate.foo.ConstProp.diff
Normal file
55
tests/mir-opt/const_prop/aggregate.foo.ConstProp.diff
Normal file
@ -0,0 +1,55 @@
|
||||
- // MIR for `foo` before ConstProp
|
||||
+ // MIR for `foo` after ConstProp
|
||||
|
||||
fn foo(_1: u8) -> () {
|
||||
debug x => _1; // in scope 0 at $DIR/aggregate.rs:+0:8: +0:9
|
||||
let mut _0: (); // return place in scope 0 at $DIR/aggregate.rs:+0:15: +0:15
|
||||
let _2: i32; // in scope 0 at $DIR/aggregate.rs:+2:9: +2:14
|
||||
let mut _3: i32; // in scope 0 at $DIR/aggregate.rs:+2:17: +2:25
|
||||
let mut _4: (i32, u8); // in scope 0 at $DIR/aggregate.rs:+2:17: +2:23
|
||||
let mut _5: u8; // in scope 0 at $DIR/aggregate.rs:+2:21: +2:22
|
||||
let mut _7: i32; // in scope 0 at $DIR/aggregate.rs:+3:18: +3:26
|
||||
let mut _8: (u8, i32); // in scope 0 at $DIR/aggregate.rs:+3:18: +3:24
|
||||
let mut _9: u8; // in scope 0 at $DIR/aggregate.rs:+3:19: +3:20
|
||||
scope 1 {
|
||||
debug first => _2; // in scope 1 at $DIR/aggregate.rs:+2:9: +2:14
|
||||
let _6: i32; // in scope 1 at $DIR/aggregate.rs:+3:9: +3:15
|
||||
scope 2 {
|
||||
debug second => _6; // in scope 2 at $DIR/aggregate.rs:+3:9: +3:15
|
||||
}
|
||||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_2); // scope 0 at $DIR/aggregate.rs:+2:9: +2:14
|
||||
StorageLive(_3); // scope 0 at $DIR/aggregate.rs:+2:17: +2:25
|
||||
StorageLive(_4); // scope 0 at $DIR/aggregate.rs:+2:17: +2:23
|
||||
StorageLive(_5); // scope 0 at $DIR/aggregate.rs:+2:21: +2:22
|
||||
_5 = _1; // scope 0 at $DIR/aggregate.rs:+2:21: +2:22
|
||||
_4 = (const 0_i32, move _5); // scope 0 at $DIR/aggregate.rs:+2:17: +2:23
|
||||
StorageDead(_5); // scope 0 at $DIR/aggregate.rs:+2:22: +2:23
|
||||
- _3 = (_4.0: i32); // scope 0 at $DIR/aggregate.rs:+2:17: +2:25
|
||||
- _2 = Add(move _3, const 1_i32); // scope 0 at $DIR/aggregate.rs:+2:17: +2:29
|
||||
+ _3 = const 0_i32; // scope 0 at $DIR/aggregate.rs:+2:17: +2:25
|
||||
+ _2 = const 1_i32; // scope 0 at $DIR/aggregate.rs:+2:17: +2:29
|
||||
StorageDead(_3); // scope 0 at $DIR/aggregate.rs:+2:28: +2:29
|
||||
StorageDead(_4); // scope 0 at $DIR/aggregate.rs:+2:29: +2:30
|
||||
StorageLive(_6); // scope 1 at $DIR/aggregate.rs:+3:9: +3:15
|
||||
StorageLive(_7); // scope 1 at $DIR/aggregate.rs:+3:18: +3:26
|
||||
StorageLive(_8); // scope 1 at $DIR/aggregate.rs:+3:18: +3:24
|
||||
StorageLive(_9); // scope 1 at $DIR/aggregate.rs:+3:19: +3:20
|
||||
_9 = _1; // scope 1 at $DIR/aggregate.rs:+3:19: +3:20
|
||||
_8 = (move _9, const 1_i32); // scope 1 at $DIR/aggregate.rs:+3:18: +3:24
|
||||
StorageDead(_9); // scope 1 at $DIR/aggregate.rs:+3:23: +3:24
|
||||
- _7 = (_8.1: i32); // scope 1 at $DIR/aggregate.rs:+3:18: +3:26
|
||||
- _6 = Add(move _7, const 2_i32); // scope 1 at $DIR/aggregate.rs:+3:18: +3:30
|
||||
+ _7 = const 1_i32; // scope 1 at $DIR/aggregate.rs:+3:18: +3:26
|
||||
+ _6 = const 3_i32; // scope 1 at $DIR/aggregate.rs:+3:18: +3:30
|
||||
StorageDead(_7); // scope 1 at $DIR/aggregate.rs:+3:29: +3:30
|
||||
StorageDead(_8); // scope 1 at $DIR/aggregate.rs:+3:30: +3:31
|
||||
_0 = const (); // scope 0 at $DIR/aggregate.rs:+0:15: +4:2
|
||||
StorageDead(_6); // scope 1 at $DIR/aggregate.rs:+4:1: +4:2
|
||||
StorageDead(_2); // scope 0 at $DIR/aggregate.rs:+4:1: +4:2
|
||||
return; // scope 0 at $DIR/aggregate.rs:+4:2: +4:2
|
||||
}
|
||||
}
|
||||
|
49
tests/mir-opt/const_prop/aggregate.foo.PreCodegen.after.mir
Normal file
49
tests/mir-opt/const_prop/aggregate.foo.PreCodegen.after.mir
Normal file
@ -0,0 +1,49 @@
|
||||
// MIR for `foo` after PreCodegen
|
||||
|
||||
fn foo(_1: u8) -> () {
|
||||
debug x => _1; // in scope 0 at $DIR/aggregate.rs:+0:8: +0:9
|
||||
let mut _0: (); // return place in scope 0 at $DIR/aggregate.rs:+0:15: +0:15
|
||||
let _2: i32; // in scope 0 at $DIR/aggregate.rs:+2:9: +2:14
|
||||
let mut _3: i32; // in scope 0 at $DIR/aggregate.rs:+2:17: +2:25
|
||||
let mut _4: (i32, u8); // in scope 0 at $DIR/aggregate.rs:+2:17: +2:23
|
||||
let mut _5: u8; // in scope 0 at $DIR/aggregate.rs:+2:21: +2:22
|
||||
let mut _7: i32; // in scope 0 at $DIR/aggregate.rs:+3:18: +3:26
|
||||
let mut _8: (u8, i32); // in scope 0 at $DIR/aggregate.rs:+3:18: +3:24
|
||||
let mut _9: u8; // in scope 0 at $DIR/aggregate.rs:+3:19: +3:20
|
||||
scope 1 {
|
||||
debug first => _2; // in scope 1 at $DIR/aggregate.rs:+2:9: +2:14
|
||||
let _6: i32; // in scope 1 at $DIR/aggregate.rs:+3:9: +3:15
|
||||
scope 2 {
|
||||
debug second => _6; // in scope 2 at $DIR/aggregate.rs:+3:9: +3:15
|
||||
}
|
||||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_2); // scope 0 at $DIR/aggregate.rs:+2:9: +2:14
|
||||
StorageLive(_3); // scope 0 at $DIR/aggregate.rs:+2:17: +2:25
|
||||
StorageLive(_4); // scope 0 at $DIR/aggregate.rs:+2:17: +2:23
|
||||
StorageLive(_5); // scope 0 at $DIR/aggregate.rs:+2:21: +2:22
|
||||
_5 = _1; // scope 0 at $DIR/aggregate.rs:+2:21: +2:22
|
||||
_4 = (const 0_i32, move _5); // scope 0 at $DIR/aggregate.rs:+2:17: +2:23
|
||||
StorageDead(_5); // scope 0 at $DIR/aggregate.rs:+2:22: +2:23
|
||||
_3 = const 0_i32; // scope 0 at $DIR/aggregate.rs:+2:17: +2:25
|
||||
_2 = const 1_i32; // scope 0 at $DIR/aggregate.rs:+2:17: +2:29
|
||||
StorageDead(_3); // scope 0 at $DIR/aggregate.rs:+2:28: +2:29
|
||||
StorageDead(_4); // scope 0 at $DIR/aggregate.rs:+2:29: +2:30
|
||||
StorageLive(_6); // scope 1 at $DIR/aggregate.rs:+3:9: +3:15
|
||||
StorageLive(_7); // scope 1 at $DIR/aggregate.rs:+3:18: +3:26
|
||||
StorageLive(_8); // scope 1 at $DIR/aggregate.rs:+3:18: +3:24
|
||||
StorageLive(_9); // scope 1 at $DIR/aggregate.rs:+3:19: +3:20
|
||||
_9 = _1; // scope 1 at $DIR/aggregate.rs:+3:19: +3:20
|
||||
_8 = (move _9, const 1_i32); // scope 1 at $DIR/aggregate.rs:+3:18: +3:24
|
||||
StorageDead(_9); // scope 1 at $DIR/aggregate.rs:+3:23: +3:24
|
||||
_7 = const 1_i32; // scope 1 at $DIR/aggregate.rs:+3:18: +3:26
|
||||
_6 = const 3_i32; // scope 1 at $DIR/aggregate.rs:+3:18: +3:30
|
||||
StorageDead(_7); // scope 1 at $DIR/aggregate.rs:+3:29: +3:30
|
||||
StorageDead(_8); // scope 1 at $DIR/aggregate.rs:+3:30: +3:31
|
||||
_0 = const (); // scope 0 at $DIR/aggregate.rs:+0:15: +4:2
|
||||
StorageDead(_6); // scope 1 at $DIR/aggregate.rs:+4:1: +4:2
|
||||
StorageDead(_2); // scope 0 at $DIR/aggregate.rs:+4:1: +4:2
|
||||
return; // scope 0 at $DIR/aggregate.rs:+4:2: +4:2
|
||||
}
|
||||
}
|
@ -3,9 +3,11 @@
|
||||
|
||||
fn main() -> () {
|
||||
let mut _0: (); // return place in scope 0 at $DIR/aggregate.rs:+0:11: +0:11
|
||||
let _1: i32; // in scope 0 at $DIR/aggregate.rs:+1:9: +1:10
|
||||
let mut _2: i32; // in scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
let mut _3: (i32, i32, i32); // in scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
let _1: u8; // in scope 0 at $DIR/aggregate.rs:+1:9: +1:10
|
||||
let mut _2: u8; // in scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
let mut _3: (i32, u8, i32); // in scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
let _4: (); // in scope 0 at $DIR/aggregate.rs:+2:5: +2:11
|
||||
let mut _5: u8; // in scope 0 at $DIR/aggregate.rs:+2:9: +2:10
|
||||
scope 1 {
|
||||
debug x => _1; // in scope 1 at $DIR/aggregate.rs:+1:9: +1:10
|
||||
}
|
||||
@ -14,19 +16,29 @@
|
||||
StorageLive(_1); // scope 0 at $DIR/aggregate.rs:+1:9: +1:10
|
||||
StorageLive(_2); // scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
StorageLive(_3); // scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
Deinit(_3); // scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
(_3.0: i32) = const 0_i32; // scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
(_3.1: i32) = const 1_i32; // scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
(_3.2: i32) = const 2_i32; // scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
- _2 = (_3.1: i32); // scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
- _1 = Add(move _2, const 0_i32); // scope 0 at $DIR/aggregate.rs:+1:13: +1:28
|
||||
+ _2 = const 1_i32; // scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
+ _1 = const 1_i32; // scope 0 at $DIR/aggregate.rs:+1:13: +1:28
|
||||
_3 = (const 0_i32, const 1_u8, const 2_i32); // scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
- _2 = (_3.1: u8); // scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
- _1 = Add(move _2, const 0_u8); // scope 0 at $DIR/aggregate.rs:+1:13: +1:28
|
||||
+ _2 = const 1_u8; // scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
+ _1 = const 1_u8; // scope 0 at $DIR/aggregate.rs:+1:13: +1:28
|
||||
StorageDead(_2); // scope 0 at $DIR/aggregate.rs:+1:27: +1:28
|
||||
StorageDead(_3); // scope 0 at $DIR/aggregate.rs:+1:28: +1:29
|
||||
_0 = const (); // scope 0 at $DIR/aggregate.rs:+0:11: +2:2
|
||||
StorageDead(_1); // scope 0 at $DIR/aggregate.rs:+2:1: +2:2
|
||||
return; // scope 0 at $DIR/aggregate.rs:+2:2: +2:2
|
||||
StorageLive(_4); // scope 1 at $DIR/aggregate.rs:+2:5: +2:11
|
||||
StorageLive(_5); // scope 1 at $DIR/aggregate.rs:+2:9: +2:10
|
||||
- _5 = _1; // scope 1 at $DIR/aggregate.rs:+2:9: +2:10
|
||||
+ _5 = const 1_u8; // scope 1 at $DIR/aggregate.rs:+2:9: +2:10
|
||||
_4 = foo(move _5) -> bb1; // scope 1 at $DIR/aggregate.rs:+2:5: +2:11
|
||||
// mir::Constant
|
||||
// + span: $DIR/aggregate.rs:8:5: 8:8
|
||||
// + literal: Const { ty: fn(u8) {foo}, val: Value(<ZST>) }
|
||||
}
|
||||
|
||||
bb1: {
|
||||
StorageDead(_5); // scope 1 at $DIR/aggregate.rs:+2:10: +2:11
|
||||
StorageDead(_4); // scope 1 at $DIR/aggregate.rs:+2:11: +2:12
|
||||
_0 = const (); // scope 0 at $DIR/aggregate.rs:+0:11: +3:2
|
||||
StorageDead(_1); // scope 0 at $DIR/aggregate.rs:+3:1: +3:2
|
||||
return; // scope 0 at $DIR/aggregate.rs:+3:2: +3:2
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2,9 +2,11 @@
|
||||
|
||||
fn main() -> () {
|
||||
let mut _0: (); // return place in scope 0 at $DIR/aggregate.rs:+0:11: +0:11
|
||||
let _1: i32; // in scope 0 at $DIR/aggregate.rs:+1:9: +1:10
|
||||
let mut _2: i32; // in scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
let mut _3: (i32, i32, i32); // in scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
let _1: u8; // in scope 0 at $DIR/aggregate.rs:+1:9: +1:10
|
||||
let mut _2: u8; // in scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
let mut _3: (i32, u8, i32); // in scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
let _4: (); // in scope 0 at $DIR/aggregate.rs:+2:5: +2:11
|
||||
let mut _5: u8; // in scope 0 at $DIR/aggregate.rs:+2:9: +2:10
|
||||
scope 1 {
|
||||
debug x => _1; // in scope 1 at $DIR/aggregate.rs:+1:9: +1:10
|
||||
}
|
||||
@ -13,16 +15,25 @@ fn main() -> () {
|
||||
StorageLive(_1); // scope 0 at $DIR/aggregate.rs:+1:9: +1:10
|
||||
StorageLive(_2); // scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
StorageLive(_3); // scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
Deinit(_3); // scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
(_3.0: i32) = const 0_i32; // scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
(_3.1: i32) = const 1_i32; // scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
(_3.2: i32) = const 2_i32; // scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
_2 = const 1_i32; // scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
_1 = const 1_i32; // scope 0 at $DIR/aggregate.rs:+1:13: +1:28
|
||||
_3 = (const 0_i32, const 1_u8, const 2_i32); // scope 0 at $DIR/aggregate.rs:+1:13: +1:22
|
||||
_2 = const 1_u8; // scope 0 at $DIR/aggregate.rs:+1:13: +1:24
|
||||
_1 = const 1_u8; // scope 0 at $DIR/aggregate.rs:+1:13: +1:28
|
||||
StorageDead(_2); // scope 0 at $DIR/aggregate.rs:+1:27: +1:28
|
||||
StorageDead(_3); // scope 0 at $DIR/aggregate.rs:+1:28: +1:29
|
||||
_0 = const (); // scope 0 at $DIR/aggregate.rs:+0:11: +2:2
|
||||
StorageDead(_1); // scope 0 at $DIR/aggregate.rs:+2:1: +2:2
|
||||
return; // scope 0 at $DIR/aggregate.rs:+2:2: +2:2
|
||||
StorageLive(_4); // scope 1 at $DIR/aggregate.rs:+2:5: +2:11
|
||||
StorageLive(_5); // scope 1 at $DIR/aggregate.rs:+2:9: +2:10
|
||||
_5 = const 1_u8; // scope 1 at $DIR/aggregate.rs:+2:9: +2:10
|
||||
_4 = foo(move _5) -> bb1; // scope 1 at $DIR/aggregate.rs:+2:5: +2:11
|
||||
// mir::Constant
|
||||
// + span: $DIR/aggregate.rs:8:5: 8:8
|
||||
// + literal: Const { ty: fn(u8) {foo}, val: Value(<ZST>) }
|
||||
}
|
||||
|
||||
bb1: {
|
||||
StorageDead(_5); // scope 1 at $DIR/aggregate.rs:+2:10: +2:11
|
||||
StorageDead(_4); // scope 1 at $DIR/aggregate.rs:+2:11: +2:12
|
||||
_0 = const (); // scope 0 at $DIR/aggregate.rs:+0:11: +3:2
|
||||
StorageDead(_1); // scope 0 at $DIR/aggregate.rs:+3:1: +3:2
|
||||
return; // scope 0 at $DIR/aggregate.rs:+3:2: +3:2
|
||||
}
|
||||
}
|
||||
|
@ -5,4 +5,13 @@
|
||||
// EMIT_MIR aggregate.main.PreCodegen.after.mir
|
||||
fn main() {
|
||||
let x = (0, 1, 2).1 + 0;
|
||||
foo(x);
|
||||
}
|
||||
|
||||
// EMIT_MIR aggregate.foo.ConstProp.diff
|
||||
// EMIT_MIR aggregate.foo.PreCodegen.after.mir
|
||||
fn foo(x: u8) {
|
||||
// Verify that we still propagate if part of the aggregate is not known.
|
||||
let first = (0, x).0 + 1;
|
||||
let second = (x, 1).1 + 2;
|
||||
}
|
||||
|
@ -17,17 +17,20 @@
|
||||
StorageLive(_1); // scope 0 at $DIR/discriminant.rs:+1:9: +1:10
|
||||
StorageLive(_2); // scope 0 at $DIR/discriminant.rs:+1:13: +1:64
|
||||
StorageLive(_3); // scope 2 at $DIR/discriminant.rs:+1:34: +1:44
|
||||
Deinit(_3); // scope 2 at $DIR/discriminant.rs:+1:34: +1:44
|
||||
((_3 as Some).0: bool) = const true; // scope 2 at $DIR/discriminant.rs:+1:34: +1:44
|
||||
discriminant(_3) = 1; // scope 2 at $DIR/discriminant.rs:+1:34: +1:44
|
||||
- _3 = Option::<bool>::Some(const true); // scope 2 at $DIR/discriminant.rs:+1:34: +1:44
|
||||
- _4 = discriminant(_3); // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
|
||||
- switchInt(move _4) -> [1: bb1, otherwise: bb3]; // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
|
||||
+ _3 = const Option::<bool>::Some(true); // scope 2 at $DIR/discriminant.rs:+1:34: +1:44
|
||||
+ // mir::Constant
|
||||
+ // + span: $DIR/discriminant.rs:12:34: 12:44
|
||||
+ // + literal: Const { ty: Option<bool>, val: Value(Scalar(0x01)) }
|
||||
+ _4 = const 1_isize; // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
|
||||
+ switchInt(const 1_isize) -> [1: bb1, otherwise: bb3]; // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
|
||||
}
|
||||
|
||||
bb1: {
|
||||
switchInt(((_3 as Some).0: bool)) -> [0: bb3, otherwise: bb2]; // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
|
||||
- switchInt(((_3 as Some).0: bool)) -> [0: bb3, otherwise: bb2]; // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
|
||||
+ switchInt(const true) -> [0: bb3, otherwise: bb2]; // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
|
||||
}
|
||||
|
||||
bb2: {
|
||||
|
@ -17,17 +17,20 @@
|
||||
StorageLive(_1); // scope 0 at $DIR/discriminant.rs:+1:9: +1:10
|
||||
StorageLive(_2); // scope 0 at $DIR/discriminant.rs:+1:13: +1:64
|
||||
StorageLive(_3); // scope 2 at $DIR/discriminant.rs:+1:34: +1:44
|
||||
Deinit(_3); // scope 2 at $DIR/discriminant.rs:+1:34: +1:44
|
||||
((_3 as Some).0: bool) = const true; // scope 2 at $DIR/discriminant.rs:+1:34: +1:44
|
||||
discriminant(_3) = 1; // scope 2 at $DIR/discriminant.rs:+1:34: +1:44
|
||||
- _3 = Option::<bool>::Some(const true); // scope 2 at $DIR/discriminant.rs:+1:34: +1:44
|
||||
- _4 = discriminant(_3); // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
|
||||
- switchInt(move _4) -> [1: bb1, otherwise: bb3]; // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
|
||||
+ _3 = const Option::<bool>::Some(true); // scope 2 at $DIR/discriminant.rs:+1:34: +1:44
|
||||
+ // mir::Constant
|
||||
+ // + span: $DIR/discriminant.rs:12:34: 12:44
|
||||
+ // + literal: Const { ty: Option<bool>, val: Value(Scalar(0x01)) }
|
||||
+ _4 = const 1_isize; // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
|
||||
+ switchInt(const 1_isize) -> [1: bb1, otherwise: bb3]; // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
|
||||
}
|
||||
|
||||
bb1: {
|
||||
switchInt(((_3 as Some).0: bool)) -> [0: bb3, otherwise: bb2]; // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
|
||||
- switchInt(((_3 as Some).0: bool)) -> [0: bb3, otherwise: bb2]; // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
|
||||
+ switchInt(const true) -> [0: bb3, otherwise: bb2]; // scope 2 at $DIR/discriminant.rs:+1:21: +1:31
|
||||
}
|
||||
|
||||
bb2: {
|
||||
|
@ -32,16 +32,14 @@
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/invalid_constant.rs:+6:9: +6:22
|
||||
StorageLive(_2); // scope 2 at $DIR/invalid_constant.rs:+6:34: +6:63
|
||||
Deinit(_2); // scope 2 at $DIR/invalid_constant.rs:+6:34: +6:63
|
||||
(_2.0: u32) = const 1114113_u32; // scope 2 at $DIR/invalid_constant.rs:+6:34: +6:63
|
||||
_2 = InvalidChar { int: const 1114113_u32 }; // scope 2 at $DIR/invalid_constant.rs:+6:34: +6:63
|
||||
- _1 = (_2.1: char); // scope 2 at $DIR/invalid_constant.rs:+6:34: +6:67
|
||||
+ _1 = const {transmute(0x00110001): char}; // scope 2 at $DIR/invalid_constant.rs:+6:34: +6:67
|
||||
StorageDead(_2); // scope 0 at $DIR/invalid_constant.rs:+6:69: +6:70
|
||||
StorageLive(_3); // scope 1 at $DIR/invalid_constant.rs:+13:9: +13:21
|
||||
StorageLive(_4); // scope 1 at $DIR/invalid_constant.rs:+13:25: +13:59
|
||||
StorageLive(_5); // scope 4 at $DIR/invalid_constant.rs:+13:34: +13:55
|
||||
Deinit(_5); // scope 4 at $DIR/invalid_constant.rs:+13:34: +13:55
|
||||
(_5.0: u32) = const 4_u32; // scope 4 at $DIR/invalid_constant.rs:+13:34: +13:55
|
||||
_5 = InvalidTag { int: const 4_u32 }; // scope 4 at $DIR/invalid_constant.rs:+13:34: +13:55
|
||||
- _4 = (_5.1: E); // scope 4 at $DIR/invalid_constant.rs:+13:34: +13:57
|
||||
- _3 = [move _4]; // scope 1 at $DIR/invalid_constant.rs:+13:24: +13:60
|
||||
+ _4 = const Scalar(0x00000004): E; // scope 4 at $DIR/invalid_constant.rs:+13:34: +13:57
|
||||
|
@ -5,13 +5,14 @@
|
||||
let mut _0: (); // return place in scope 0 at $DIR/issue_66971.rs:+0:11: +0:11
|
||||
let _1: (); // in scope 0 at $DIR/issue_66971.rs:+1:5: +1:23
|
||||
let mut _2: ((), u8, u8); // in scope 0 at $DIR/issue_66971.rs:+1:12: +1:22
|
||||
let mut _3: (); // in scope 0 at $DIR/issue_66971.rs:+1:13: +1:15
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/issue_66971.rs:+1:5: +1:23
|
||||
StorageLive(_2); // scope 0 at $DIR/issue_66971.rs:+1:12: +1:22
|
||||
Deinit(_2); // scope 0 at $DIR/issue_66971.rs:+1:12: +1:22
|
||||
(_2.1: u8) = const 0_u8; // scope 0 at $DIR/issue_66971.rs:+1:12: +1:22
|
||||
(_2.2: u8) = const 0_u8; // scope 0 at $DIR/issue_66971.rs:+1:12: +1:22
|
||||
StorageLive(_3); // scope 0 at $DIR/issue_66971.rs:+1:13: +1:15
|
||||
_2 = (move _3, const 0_u8, const 0_u8); // scope 0 at $DIR/issue_66971.rs:+1:12: +1:22
|
||||
StorageDead(_3); // scope 0 at $DIR/issue_66971.rs:+1:21: +1:22
|
||||
_1 = encode(move _2) -> bb1; // scope 0 at $DIR/issue_66971.rs:+1:5: +1:23
|
||||
// mir::Constant
|
||||
// + span: $DIR/issue_66971.rs:17:5: 17:11
|
||||
|
@ -11,12 +11,9 @@
|
||||
StorageLive(_1); // scope 0 at $DIR/issue_67019.rs:+1:5: +1:20
|
||||
StorageLive(_2); // scope 0 at $DIR/issue_67019.rs:+1:10: +1:19
|
||||
StorageLive(_3); // scope 0 at $DIR/issue_67019.rs:+1:11: +1:17
|
||||
Deinit(_3); // scope 0 at $DIR/issue_67019.rs:+1:11: +1:17
|
||||
(_3.0: u8) = const 1_u8; // scope 0 at $DIR/issue_67019.rs:+1:11: +1:17
|
||||
(_3.1: u8) = const 2_u8; // scope 0 at $DIR/issue_67019.rs:+1:11: +1:17
|
||||
Deinit(_2); // scope 0 at $DIR/issue_67019.rs:+1:10: +1:19
|
||||
- (_2.0: (u8, u8)) = move _3; // scope 0 at $DIR/issue_67019.rs:+1:10: +1:19
|
||||
+ (_2.0: (u8, u8)) = const (1_u8, 2_u8); // scope 0 at $DIR/issue_67019.rs:+1:10: +1:19
|
||||
- _3 = (const 1_u8, const 2_u8); // scope 0 at $DIR/issue_67019.rs:+1:11: +1:17
|
||||
+ _3 = const (1_u8, 2_u8); // scope 0 at $DIR/issue_67019.rs:+1:11: +1:17
|
||||
_2 = (move _3,); // scope 0 at $DIR/issue_67019.rs:+1:10: +1:19
|
||||
StorageDead(_3); // scope 0 at $DIR/issue_67019.rs:+1:18: +1:19
|
||||
_1 = test(move _2) -> bb1; // scope 0 at $DIR/issue_67019.rs:+1:5: +1:20
|
||||
// mir::Constant
|
||||
|
@ -14,9 +14,8 @@
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/mutable_variable_aggregate.rs:+1:9: +1:14
|
||||
Deinit(_1); // scope 0 at $DIR/mutable_variable_aggregate.rs:+1:17: +1:25
|
||||
(_1.0: i32) = const 42_i32; // scope 0 at $DIR/mutable_variable_aggregate.rs:+1:17: +1:25
|
||||
(_1.1: i32) = const 43_i32; // scope 0 at $DIR/mutable_variable_aggregate.rs:+1:17: +1:25
|
||||
- _1 = (const 42_i32, const 43_i32); // scope 0 at $DIR/mutable_variable_aggregate.rs:+1:17: +1:25
|
||||
+ _1 = const (42_i32, 43_i32); // scope 0 at $DIR/mutable_variable_aggregate.rs:+1:17: +1:25
|
||||
(_1.1: i32) = const 99_i32; // scope 1 at $DIR/mutable_variable_aggregate.rs:+2:5: +2:13
|
||||
StorageLive(_2); // scope 1 at $DIR/mutable_variable_aggregate.rs:+3:9: +3:10
|
||||
- _2 = _1; // scope 1 at $DIR/mutable_variable_aggregate.rs:+3:13: +3:14
|
||||
|
@ -18,9 +18,7 @@
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/mutable_variable_aggregate_mut_ref.rs:+1:9: +1:14
|
||||
Deinit(_1); // scope 0 at $DIR/mutable_variable_aggregate_mut_ref.rs:+1:17: +1:25
|
||||
(_1.0: i32) = const 42_i32; // scope 0 at $DIR/mutable_variable_aggregate_mut_ref.rs:+1:17: +1:25
|
||||
(_1.1: i32) = const 43_i32; // scope 0 at $DIR/mutable_variable_aggregate_mut_ref.rs:+1:17: +1:25
|
||||
_1 = (const 42_i32, const 43_i32); // scope 0 at $DIR/mutable_variable_aggregate_mut_ref.rs:+1:17: +1:25
|
||||
StorageLive(_2); // scope 1 at $DIR/mutable_variable_aggregate_mut_ref.rs:+2:9: +2:10
|
||||
_2 = &mut _1; // scope 1 at $DIR/mutable_variable_aggregate_mut_ref.rs:+2:13: +2:19
|
||||
((*_2).1: i32) = const 99_i32; // scope 2 at $DIR/mutable_variable_aggregate_mut_ref.rs:+3:5: +3:13
|
||||
|
@ -4,19 +4,18 @@
|
||||
fn main() -> () {
|
||||
let mut _0: (); // return place in scope 0 at $DIR/mutable_variable_unprop_assign.rs:+0:11: +0:11
|
||||
let _1: i32; // in scope 0 at $DIR/mutable_variable_unprop_assign.rs:+1:9: +1:10
|
||||
let mut _2: i32; // in scope 0 at $DIR/mutable_variable_unprop_assign.rs:+3:11: +3:12
|
||||
let mut _3: i32; // in scope 0 at $DIR/mutable_variable_unprop_assign.rs:+3:11: +3:12
|
||||
scope 1 {
|
||||
debug a => _1; // in scope 1 at $DIR/mutable_variable_unprop_assign.rs:+1:9: +1:10
|
||||
let mut _5: i32; // in scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:9: +2:14
|
||||
let mut _6: i32; // in scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:9: +2:14
|
||||
let mut _2: (i32, i32); // in scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:9: +2:14
|
||||
scope 2 {
|
||||
debug x => (i32, i32){ .0 => _5, .1 => _6, }; // in scope 2 at $DIR/mutable_variable_unprop_assign.rs:+2:9: +2:14
|
||||
let _3: i32; // in scope 2 at $DIR/mutable_variable_unprop_assign.rs:+4:9: +4:10
|
||||
debug x => _2; // in scope 2 at $DIR/mutable_variable_unprop_assign.rs:+2:9: +2:14
|
||||
let _4: i32; // in scope 2 at $DIR/mutable_variable_unprop_assign.rs:+4:9: +4:10
|
||||
scope 3 {
|
||||
debug y => _3; // in scope 3 at $DIR/mutable_variable_unprop_assign.rs:+4:9: +4:10
|
||||
let _4: i32; // in scope 3 at $DIR/mutable_variable_unprop_assign.rs:+5:9: +5:10
|
||||
debug y => _4; // in scope 3 at $DIR/mutable_variable_unprop_assign.rs:+4:9: +4:10
|
||||
let _5: i32; // in scope 3 at $DIR/mutable_variable_unprop_assign.rs:+5:9: +5:10
|
||||
scope 4 {
|
||||
debug z => _4; // in scope 4 at $DIR/mutable_variable_unprop_assign.rs:+5:9: +5:10
|
||||
debug z => _5; // in scope 4 at $DIR/mutable_variable_unprop_assign.rs:+5:9: +5:10
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -31,25 +30,21 @@
|
||||
}
|
||||
|
||||
bb1: {
|
||||
StorageLive(_5); // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:9: +2:14
|
||||
StorageLive(_6); // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:9: +2:14
|
||||
Deinit(_5); // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:29: +2:35
|
||||
Deinit(_6); // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:29: +2:35
|
||||
_5 = const 1_i32; // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:29: +2:35
|
||||
_6 = const 2_i32; // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:29: +2:35
|
||||
StorageLive(_2); // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+3:11: +3:12
|
||||
_2 = _1; // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+3:11: +3:12
|
||||
_6 = move _2; // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+3:5: +3:12
|
||||
StorageDead(_2); // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+3:11: +3:12
|
||||
StorageLive(_3); // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+4:9: +4:10
|
||||
_3 = _6; // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+4:13: +4:16
|
||||
StorageLive(_4); // scope 3 at $DIR/mutable_variable_unprop_assign.rs:+5:9: +5:10
|
||||
- _4 = _5; // scope 3 at $DIR/mutable_variable_unprop_assign.rs:+5:13: +5:16
|
||||
+ _4 = const 1_i32; // scope 3 at $DIR/mutable_variable_unprop_assign.rs:+5:13: +5:16
|
||||
StorageDead(_4); // scope 3 at $DIR/mutable_variable_unprop_assign.rs:+6:1: +6:2
|
||||
StorageDead(_3); // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+6:1: +6:2
|
||||
StorageDead(_5); // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+6:1: +6:2
|
||||
StorageDead(_6); // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+6:1: +6:2
|
||||
StorageLive(_2); // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:9: +2:14
|
||||
- _2 = (const 1_i32, const 2_i32); // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:29: +2:35
|
||||
+ _2 = const (1_i32, 2_i32); // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+2:29: +2:35
|
||||
StorageLive(_3); // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+3:11: +3:12
|
||||
_3 = _1; // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+3:11: +3:12
|
||||
(_2.1: i32) = move _3; // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+3:5: +3:12
|
||||
StorageDead(_3); // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+3:11: +3:12
|
||||
StorageLive(_4); // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+4:9: +4:10
|
||||
_4 = (_2.1: i32); // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+4:13: +4:16
|
||||
StorageLive(_5); // scope 3 at $DIR/mutable_variable_unprop_assign.rs:+5:9: +5:10
|
||||
- _5 = (_2.0: i32); // scope 3 at $DIR/mutable_variable_unprop_assign.rs:+5:13: +5:16
|
||||
+ _5 = const 1_i32; // scope 3 at $DIR/mutable_variable_unprop_assign.rs:+5:13: +5:16
|
||||
StorageDead(_5); // scope 3 at $DIR/mutable_variable_unprop_assign.rs:+6:1: +6:2
|
||||
StorageDead(_4); // scope 2 at $DIR/mutable_variable_unprop_assign.rs:+6:1: +6:2
|
||||
StorageDead(_2); // scope 1 at $DIR/mutable_variable_unprop_assign.rs:+6:1: +6:2
|
||||
StorageDead(_1); // scope 0 at $DIR/mutable_variable_unprop_assign.rs:+6:1: +6:2
|
||||
return; // scope 0 at $DIR/mutable_variable_unprop_assign.rs:+6:2: +6:2
|
||||
}
|
||||
|
@ -9,7 +9,7 @@
|
||||
let _5: usize; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:32: +2:33
|
||||
let mut _6: usize; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
|
||||
let mut _7: bool; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
|
||||
let mut _9: u32; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
let mut _9: Point; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
scope 1 {
|
||||
debug x => _1; // in scope 1 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
|
||||
let _3: i32; // in scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
|
||||
@ -52,9 +52,8 @@
|
||||
StorageDead(_4); // scope 1 at $DIR/optimizes_into_variable.rs:+2:34: +2:35
|
||||
StorageLive(_8); // scope 2 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
|
||||
StorageLive(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
Deinit(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
_9 = const 42_u32; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
- _8 = _9; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:38
|
||||
_9 = Point { x: const 12_u32, y: const 42_u32 }; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
- _8 = (_9.1: u32); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:38
|
||||
+ _8 = const 42_u32; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:38
|
||||
StorageDead(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:38: +3:39
|
||||
StorageDead(_8); // scope 2 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
||||
|
@ -9,7 +9,7 @@
|
||||
let _5: usize; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:32: +2:33
|
||||
let mut _6: usize; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
|
||||
let mut _7: bool; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
|
||||
let mut _9: u32; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
let mut _9: Point; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
scope 1 {
|
||||
debug x => _1; // in scope 1 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
|
||||
let _3: i32; // in scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
|
||||
@ -52,9 +52,8 @@
|
||||
StorageDead(_4); // scope 1 at $DIR/optimizes_into_variable.rs:+2:34: +2:35
|
||||
StorageLive(_8); // scope 2 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
|
||||
StorageLive(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
Deinit(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
_9 = const 42_u32; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
- _8 = _9; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:38
|
||||
_9 = Point { x: const 12_u32, y: const 42_u32 }; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
- _8 = (_9.1: u32); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:38
|
||||
+ _8 = const 42_u32; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:38
|
||||
StorageDead(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:38: +3:39
|
||||
StorageDead(_8); // scope 2 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
||||
|
@ -10,8 +10,6 @@
|
||||
let mut _6: usize; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
|
||||
let mut _7: bool; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
|
||||
let mut _9: Point; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
+ let mut _10: u32; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
+ let mut _11: u32; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
scope 1 {
|
||||
debug x => _1; // in scope 1 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
|
||||
let _3: i32; // in scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
|
||||
@ -47,21 +45,10 @@
|
||||
StorageDead(_5); // scope 1 at $DIR/optimizes_into_variable.rs:+2:34: +2:35
|
||||
StorageDead(_4); // scope 1 at $DIR/optimizes_into_variable.rs:+2:34: +2:35
|
||||
StorageLive(_8); // scope 2 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
|
||||
- StorageLive(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
- Deinit(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
- (_9.0: u32) = const 12_u32; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
- (_9.1: u32) = const 42_u32; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
- _8 = (_9.1: u32); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:38
|
||||
- StorageDead(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:38: +3:39
|
||||
+ StorageLive(_10); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
+ StorageLive(_11); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
+ Deinit(_10); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
+ Deinit(_11); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
+ _10 = const 12_u32; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
+ _11 = const 42_u32; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
+ _8 = _11; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:38
|
||||
+ StorageDead(_10); // scope 2 at $DIR/optimizes_into_variable.rs:+3:38: +3:39
|
||||
+ StorageDead(_11); // scope 2 at $DIR/optimizes_into_variable.rs:+3:38: +3:39
|
||||
StorageLive(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
_9 = Point { x: const 12_u32, y: const 42_u32 }; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
_8 = (_9.1: u32); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:38
|
||||
StorageDead(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:38: +3:39
|
||||
nop; // scope 0 at $DIR/optimizes_into_variable.rs:+0:11: +4:2
|
||||
StorageDead(_8); // scope 2 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
||||
StorageDead(_3); // scope 1 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
||||
|
@ -10,8 +10,6 @@
|
||||
let mut _6: usize; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
|
||||
let mut _7: bool; // in scope 0 at $DIR/optimizes_into_variable.rs:+2:13: +2:34
|
||||
let mut _9: Point; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
+ let mut _10: u32; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
+ let mut _11: u32; // in scope 0 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
scope 1 {
|
||||
debug x => _1; // in scope 1 at $DIR/optimizes_into_variable.rs:+1:9: +1:10
|
||||
let _3: i32; // in scope 1 at $DIR/optimizes_into_variable.rs:+2:9: +2:10
|
||||
@ -47,21 +45,10 @@
|
||||
StorageDead(_5); // scope 1 at $DIR/optimizes_into_variable.rs:+2:34: +2:35
|
||||
StorageDead(_4); // scope 1 at $DIR/optimizes_into_variable.rs:+2:34: +2:35
|
||||
StorageLive(_8); // scope 2 at $DIR/optimizes_into_variable.rs:+3:9: +3:10
|
||||
- StorageLive(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
- Deinit(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
- (_9.0: u32) = const 12_u32; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
- (_9.1: u32) = const 42_u32; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
- _8 = (_9.1: u32); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:38
|
||||
- StorageDead(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:38: +3:39
|
||||
+ StorageLive(_10); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
+ StorageLive(_11); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
+ Deinit(_10); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
+ Deinit(_11); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
+ _10 = const 12_u32; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
+ _11 = const 42_u32; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
+ _8 = _11; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:38
|
||||
+ StorageDead(_10); // scope 2 at $DIR/optimizes_into_variable.rs:+3:38: +3:39
|
||||
+ StorageDead(_11); // scope 2 at $DIR/optimizes_into_variable.rs:+3:38: +3:39
|
||||
StorageLive(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
_9 = Point { x: const 12_u32, y: const 42_u32 }; // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:36
|
||||
_8 = (_9.1: u32); // scope 2 at $DIR/optimizes_into_variable.rs:+3:13: +3:38
|
||||
StorageDead(_9); // scope 2 at $DIR/optimizes_into_variable.rs:+3:38: +3:39
|
||||
nop; // scope 0 at $DIR/optimizes_into_variable.rs:+0:11: +4:2
|
||||
StorageDead(_8); // scope 2 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
||||
StorageDead(_3); // scope 1 at $DIR/optimizes_into_variable.rs:+4:1: +4:2
|
||||
|
@ -11,24 +11,17 @@
|
||||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/tuple_literal_propagation.rs:+1:9: +1:10
|
||||
Deinit(_1); // scope 0 at $DIR/tuple_literal_propagation.rs:+1:13: +1:19
|
||||
(_1.0: u32) = const 1_u32; // scope 0 at $DIR/tuple_literal_propagation.rs:+1:13: +1:19
|
||||
(_1.1: u32) = const 2_u32; // scope 0 at $DIR/tuple_literal_propagation.rs:+1:13: +1:19
|
||||
- _1 = (const 1_u32, const 2_u32); // scope 0 at $DIR/tuple_literal_propagation.rs:+1:13: +1:19
|
||||
+ _1 = const (1_u32, 2_u32); // scope 0 at $DIR/tuple_literal_propagation.rs:+1:13: +1:19
|
||||
StorageLive(_2); // scope 1 at $DIR/tuple_literal_propagation.rs:+3:5: +3:15
|
||||
StorageLive(_3); // scope 1 at $DIR/tuple_literal_propagation.rs:+3:13: +3:14
|
||||
- _3 = _1; // scope 1 at $DIR/tuple_literal_propagation.rs:+3:13: +3:14
|
||||
+ _3 = const (1_u32, 2_u32); // scope 1 at $DIR/tuple_literal_propagation.rs:+3:13: +3:14
|
||||
_2 = consume(move _3) -> bb1; // scope 1 at $DIR/tuple_literal_propagation.rs:+3:5: +3:15
|
||||
_2 = consume(_1) -> bb1; // scope 1 at $DIR/tuple_literal_propagation.rs:+3:5: +3:15
|
||||
// mir::Constant
|
||||
// + span: $DIR/tuple_literal_propagation.rs:5:5: 5:12
|
||||
// + literal: Const { ty: fn((u32, u32)) {consume}, val: Value(<ZST>) }
|
||||
}
|
||||
|
||||
bb1: {
|
||||
StorageDead(_3); // scope 1 at $DIR/tuple_literal_propagation.rs:+3:14: +3:15
|
||||
StorageDead(_2); // scope 1 at $DIR/tuple_literal_propagation.rs:+3:15: +3:16
|
||||
StorageDead(_1); // scope 0 at $DIR/tuple_literal_propagation.rs:+4:1: +4:2
|
||||
return; // scope 0 at $DIR/tuple_literal_propagation.rs:+4:2: +4:2
|
||||
}
|
||||
}
|
||||
|
@ -19,8 +19,8 @@
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/const_prop_miscompile.rs:+1:9: +1:14
|
||||
Deinit(_1); // scope 0 at $DIR/const_prop_miscompile.rs:+1:17: +1:21
|
||||
(_1.0: i32) = const 1_i32; // scope 0 at $DIR/const_prop_miscompile.rs:+1:17: +1:21
|
||||
- _1 = (const 1_i32,); // scope 0 at $DIR/const_prop_miscompile.rs:+1:17: +1:21
|
||||
+ _1 = const (1_i32,); // scope 0 at $DIR/const_prop_miscompile.rs:+1:17: +1:21
|
||||
StorageLive(_2); // scope 1 at $DIR/const_prop_miscompile.rs:+2:5: +4:6
|
||||
StorageLive(_3); // scope 2 at $DIR/const_prop_miscompile.rs:+3:10: +3:22
|
||||
_3 = &raw mut (_1.0: i32); // scope 2 at $DIR/const_prop_miscompile.rs:+3:10: +3:22
|
||||
|
@ -16,8 +16,8 @@
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/const_prop_miscompile.rs:+1:9: +1:14
|
||||
Deinit(_1); // scope 0 at $DIR/const_prop_miscompile.rs:+1:17: +1:21
|
||||
(_1.0: i32) = const 1_i32; // scope 0 at $DIR/const_prop_miscompile.rs:+1:17: +1:21
|
||||
- _1 = (const 1_i32,); // scope 0 at $DIR/const_prop_miscompile.rs:+1:17: +1:21
|
||||
+ _1 = const (1_i32,); // scope 0 at $DIR/const_prop_miscompile.rs:+1:17: +1:21
|
||||
StorageLive(_2); // scope 1 at $DIR/const_prop_miscompile.rs:+2:6: +2:14
|
||||
_2 = &mut (_1.0: i32); // scope 1 at $DIR/const_prop_miscompile.rs:+2:6: +2:14
|
||||
(*_2) = const 5_i32; // scope 1 at $DIR/const_prop_miscompile.rs:+2:5: +2:18
|
||||
|
@ -57,9 +57,7 @@
|
||||
|
||||
bb1: {
|
||||
StorageDead(_6); // scope 2 at $DIR/issue_107511.rs:+6:23: +6:24
|
||||
Deinit(_4); // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24
|
||||
(_4.0: usize) = const 0_usize; // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24
|
||||
(_4.1: usize) = move _5; // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24
|
||||
_4 = std::ops::Range::<usize> { start: const 0_usize, end: move _5 }; // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24
|
||||
StorageDead(_5); // scope 2 at $DIR/issue_107511.rs:+6:23: +6:24
|
||||
_3 = <std::ops::Range<usize> as IntoIterator>::into_iter(move _4) -> bb2; // scope 2 at $DIR/issue_107511.rs:+6:14: +6:24
|
||||
// mir::Constant
|
||||
|
@ -23,9 +23,7 @@
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/enum.rs:+1:9: +1:10
|
||||
Deinit(_1); // scope 0 at $DIR/enum.rs:+1:13: +1:21
|
||||
((_1 as V1).0: i32) = const 0_i32; // scope 0 at $DIR/enum.rs:+1:13: +1:21
|
||||
discriminant(_1) = 0; // scope 0 at $DIR/enum.rs:+1:13: +1:21
|
||||
_1 = E::V1(const 0_i32); // scope 0 at $DIR/enum.rs:+1:13: +1:21
|
||||
StorageLive(_2); // scope 1 at $DIR/enum.rs:+2:9: +2:10
|
||||
_3 = discriminant(_1); // scope 1 at $DIR/enum.rs:+2:19: +2:20
|
||||
switchInt(move _3) -> [0: bb3, 1: bb1, otherwise: bb2]; // scope 1 at $DIR/enum.rs:+2:13: +2:20
|
||||
|
@ -17,8 +17,7 @@
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/repr_transparent.rs:+1:9: +1:10
|
||||
Deinit(_1); // scope 0 at $DIR/repr_transparent.rs:+1:13: +1:19
|
||||
(_1.0: i32) = const 0_i32; // scope 0 at $DIR/repr_transparent.rs:+1:13: +1:19
|
||||
_1 = I32(const 0_i32); // scope 0 at $DIR/repr_transparent.rs:+1:13: +1:19
|
||||
StorageLive(_2); // scope 1 at $DIR/repr_transparent.rs:+2:9: +2:10
|
||||
StorageLive(_3); // scope 1 at $DIR/repr_transparent.rs:+2:17: +2:26
|
||||
StorageLive(_4); // scope 1 at $DIR/repr_transparent.rs:+2:17: +2:20
|
||||
@ -31,9 +30,8 @@
|
||||
+ _3 = const 0_i32; // scope 1 at $DIR/repr_transparent.rs:+2:17: +2:26
|
||||
StorageDead(_5); // scope 1 at $DIR/repr_transparent.rs:+2:25: +2:26
|
||||
StorageDead(_4); // scope 1 at $DIR/repr_transparent.rs:+2:25: +2:26
|
||||
Deinit(_2); // scope 1 at $DIR/repr_transparent.rs:+2:13: +2:27
|
||||
- (_2.0: i32) = move _3; // scope 1 at $DIR/repr_transparent.rs:+2:13: +2:27
|
||||
+ (_2.0: i32) = const 0_i32; // scope 1 at $DIR/repr_transparent.rs:+2:13: +2:27
|
||||
- _2 = I32(move _3); // scope 1 at $DIR/repr_transparent.rs:+2:13: +2:27
|
||||
+ _2 = I32(const 0_i32); // scope 1 at $DIR/repr_transparent.rs:+2:13: +2:27
|
||||
StorageDead(_3); // scope 1 at $DIR/repr_transparent.rs:+2:26: +2:27
|
||||
_0 = const (); // scope 0 at $DIR/repr_transparent.rs:+0:11: +3:2
|
||||
StorageDead(_2); // scope 1 at $DIR/repr_transparent.rs:+3:1: +3:2
|
||||
|
@ -23,9 +23,7 @@
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/sibling_ptr.rs:+1:9: +1:14
|
||||
Deinit(_1); // scope 0 at $DIR/sibling_ptr.rs:+1:27: +1:33
|
||||
(_1.0: u8) = const 0_u8; // scope 0 at $DIR/sibling_ptr.rs:+1:27: +1:33
|
||||
(_1.1: u8) = const 0_u8; // scope 0 at $DIR/sibling_ptr.rs:+1:27: +1:33
|
||||
_1 = (const 0_u8, const 0_u8); // scope 0 at $DIR/sibling_ptr.rs:+1:27: +1:33
|
||||
StorageLive(_2); // scope 1 at $DIR/sibling_ptr.rs:+2:5: +5:6
|
||||
StorageLive(_3); // scope 2 at $DIR/sibling_ptr.rs:+3:13: +3:14
|
||||
_3 = &raw mut (_1.0: u8); // scope 2 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
|
||||
|
@ -21,8 +21,7 @@
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/struct.rs:+1:9: +1:14
|
||||
Deinit(_1); // scope 0 at $DIR/struct.rs:+1:17: +1:21
|
||||
(_1.0: i32) = const 1_i32; // scope 0 at $DIR/struct.rs:+1:17: +1:21
|
||||
_1 = S(const 1_i32); // scope 0 at $DIR/struct.rs:+1:17: +1:21
|
||||
StorageLive(_2); // scope 1 at $DIR/struct.rs:+2:9: +2:10
|
||||
StorageLive(_3); // scope 1 at $DIR/struct.rs:+2:13: +2:16
|
||||
- _3 = (_1.0: i32); // scope 1 at $DIR/struct.rs:+2:13: +2:16
|
||||
|
@ -25,9 +25,7 @@
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/tuple.rs:+1:9: +1:14
|
||||
Deinit(_1); // scope 0 at $DIR/tuple.rs:+1:17: +1:23
|
||||
(_1.0: i32) = const 1_i32; // scope 0 at $DIR/tuple.rs:+1:17: +1:23
|
||||
(_1.1: i32) = const 2_i32; // scope 0 at $DIR/tuple.rs:+1:17: +1:23
|
||||
_1 = (const 1_i32, const 2_i32); // scope 0 at $DIR/tuple.rs:+1:17: +1:23
|
||||
StorageLive(_2); // scope 1 at $DIR/tuple.rs:+2:9: +2:10
|
||||
StorageLive(_3); // scope 1 at $DIR/tuple.rs:+2:13: +2:22
|
||||
StorageLive(_4); // scope 1 at $DIR/tuple.rs:+2:13: +2:16
|
||||
@ -43,9 +41,7 @@
|
||||
- _2 = Add(move _3, const 3_i32); // scope 1 at $DIR/tuple.rs:+2:13: +2:26
|
||||
+ _2 = const 6_i32; // scope 1 at $DIR/tuple.rs:+2:13: +2:26
|
||||
StorageDead(_3); // scope 1 at $DIR/tuple.rs:+2:25: +2:26
|
||||
Deinit(_1); // scope 2 at $DIR/tuple.rs:+3:5: +3:15
|
||||
(_1.0: i32) = const 2_i32; // scope 2 at $DIR/tuple.rs:+3:5: +3:15
|
||||
(_1.1: i32) = const 3_i32; // scope 2 at $DIR/tuple.rs:+3:5: +3:15
|
||||
_1 = (const 2_i32, const 3_i32); // scope 2 at $DIR/tuple.rs:+3:5: +3:15
|
||||
StorageLive(_6); // scope 2 at $DIR/tuple.rs:+4:9: +4:10
|
||||
StorageLive(_7); // scope 2 at $DIR/tuple.rs:+4:13: +4:22
|
||||
StorageLive(_8); // scope 2 at $DIR/tuple.rs:+4:13: +4:16
|
||||
|
@ -1,21 +0,0 @@
|
||||
- // MIR for `bar` before Deaggregator
|
||||
+ // MIR for `bar` after Deaggregator
|
||||
|
||||
fn bar(_1: usize) -> Baz {
|
||||
debug a => _1; // in scope 0 at $DIR/deaggregator_test.rs:+0:8: +0:9
|
||||
let mut _0: Baz; // return place in scope 0 at $DIR/deaggregator_test.rs:+0:21: +0:24
|
||||
let mut _2: usize; // in scope 0 at $DIR/deaggregator_test.rs:+1:14: +1:15
|
||||
|
||||
bb0: {
|
||||
StorageLive(_2); // scope 0 at $DIR/deaggregator_test.rs:+1:14: +1:15
|
||||
_2 = _1; // scope 0 at $DIR/deaggregator_test.rs:+1:14: +1:15
|
||||
- _0 = Baz { x: move _2, y: const 0f32, z: const false }; // scope 0 at $DIR/deaggregator_test.rs:+1:5: +1:35
|
||||
+ Deinit(_0); // scope 0 at $DIR/deaggregator_test.rs:+1:5: +1:35
|
||||
+ (_0.0: usize) = move _2; // scope 0 at $DIR/deaggregator_test.rs:+1:5: +1:35
|
||||
+ (_0.1: f32) = const 0f32; // scope 0 at $DIR/deaggregator_test.rs:+1:5: +1:35
|
||||
+ (_0.2: bool) = const false; // scope 0 at $DIR/deaggregator_test.rs:+1:5: +1:35
|
||||
StorageDead(_2); // scope 0 at $DIR/deaggregator_test.rs:+1:34: +1:35
|
||||
return; // scope 0 at $DIR/deaggregator_test.rs:+2:2: +2:2
|
||||
}
|
||||
}
|
||||
|
@ -1,17 +0,0 @@
|
||||
// unit-test: Deaggregator
|
||||
|
||||
struct Baz {
|
||||
x: usize,
|
||||
y: f32,
|
||||
z: bool,
|
||||
}
|
||||
|
||||
// EMIT_MIR deaggregator_test.bar.Deaggregator.diff
|
||||
fn bar(a: usize) -> Baz {
|
||||
Baz { x: a, y: 0.0, z: false }
|
||||
}
|
||||
|
||||
fn main() {
|
||||
// Make sure the function actually gets instantiated.
|
||||
bar(0);
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
- // MIR for `bar` before Deaggregator
|
||||
+ // MIR for `bar` after Deaggregator
|
||||
|
||||
fn bar(_1: usize) -> Baz {
|
||||
debug a => _1; // in scope 0 at $DIR/deaggregator_test_enum.rs:+0:8: +0:9
|
||||
let mut _0: Baz; // return place in scope 0 at $DIR/deaggregator_test_enum.rs:+0:21: +0:24
|
||||
let mut _2: usize; // in scope 0 at $DIR/deaggregator_test_enum.rs:+1:19: +1:20
|
||||
|
||||
bb0: {
|
||||
StorageLive(_2); // scope 0 at $DIR/deaggregator_test_enum.rs:+1:19: +1:20
|
||||
_2 = _1; // scope 0 at $DIR/deaggregator_test_enum.rs:+1:19: +1:20
|
||||
- _0 = Baz::Foo { x: move _2 }; // scope 0 at $DIR/deaggregator_test_enum.rs:+1:5: +1:22
|
||||
+ Deinit(_0); // scope 0 at $DIR/deaggregator_test_enum.rs:+1:5: +1:22
|
||||
+ ((_0 as Foo).0: usize) = move _2; // scope 0 at $DIR/deaggregator_test_enum.rs:+1:5: +1:22
|
||||
+ discriminant(_0) = 1; // scope 0 at $DIR/deaggregator_test_enum.rs:+1:5: +1:22
|
||||
StorageDead(_2); // scope 0 at $DIR/deaggregator_test_enum.rs:+1:21: +1:22
|
||||
return; // scope 0 at $DIR/deaggregator_test_enum.rs:+2:2: +2:2
|
||||
}
|
||||
}
|
||||
|
@ -1,19 +0,0 @@
|
||||
// unit-test: Deaggregator
|
||||
|
||||
enum Baz {
|
||||
Empty,
|
||||
Foo { x: usize },
|
||||
}
|
||||
|
||||
// EMIT_MIR deaggregator_test_enum.bar.Deaggregator.diff
|
||||
fn bar(a: usize) -> Baz {
|
||||
Baz::Foo { x: a }
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let x = bar(10);
|
||||
match x {
|
||||
Baz::Empty => println!("empty"),
|
||||
Baz::Foo { x } => println!("{}", x),
|
||||
};
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
// unit-test: Deaggregator
|
||||
// Test that deaggregate fires in more than one basic block
|
||||
|
||||
enum Foo {
|
||||
A(i32),
|
||||
B(i32),
|
||||
}
|
||||
|
||||
// EMIT_MIR deaggregator_test_enum_2.test1.Deaggregator.diff
|
||||
fn test1(x: bool, y: i32) -> Foo {
|
||||
if x {
|
||||
Foo::A(y)
|
||||
} else {
|
||||
Foo::B(y)
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
// Make sure the function actually gets instantiated.
|
||||
test1(false, 0);
|
||||
}
|
@ -1,45 +0,0 @@
|
||||
- // MIR for `test1` before Deaggregator
|
||||
+ // MIR for `test1` after Deaggregator
|
||||
|
||||
fn test1(_1: bool, _2: i32) -> Foo {
|
||||
debug x => _1; // in scope 0 at $DIR/deaggregator_test_enum_2.rs:+0:10: +0:11
|
||||
debug y => _2; // in scope 0 at $DIR/deaggregator_test_enum_2.rs:+0:19: +0:20
|
||||
let mut _0: Foo; // return place in scope 0 at $DIR/deaggregator_test_enum_2.rs:+0:30: +0:33
|
||||
let mut _3: bool; // in scope 0 at $DIR/deaggregator_test_enum_2.rs:+1:8: +1:9
|
||||
let mut _4: i32; // in scope 0 at $DIR/deaggregator_test_enum_2.rs:+2:16: +2:17
|
||||
let mut _5: i32; // in scope 0 at $DIR/deaggregator_test_enum_2.rs:+4:16: +4:17
|
||||
|
||||
bb0: {
|
||||
StorageLive(_3); // scope 0 at $DIR/deaggregator_test_enum_2.rs:+1:8: +1:9
|
||||
_3 = _1; // scope 0 at $DIR/deaggregator_test_enum_2.rs:+1:8: +1:9
|
||||
switchInt(move _3) -> [0: bb2, otherwise: bb1]; // scope 0 at $DIR/deaggregator_test_enum_2.rs:+1:8: +1:9
|
||||
}
|
||||
|
||||
bb1: {
|
||||
StorageLive(_4); // scope 0 at $DIR/deaggregator_test_enum_2.rs:+2:16: +2:17
|
||||
_4 = _2; // scope 0 at $DIR/deaggregator_test_enum_2.rs:+2:16: +2:17
|
||||
- _0 = Foo::A(move _4); // scope 0 at $DIR/deaggregator_test_enum_2.rs:+2:9: +2:18
|
||||
+ Deinit(_0); // scope 0 at $DIR/deaggregator_test_enum_2.rs:+2:9: +2:18
|
||||
+ ((_0 as A).0: i32) = move _4; // scope 0 at $DIR/deaggregator_test_enum_2.rs:+2:9: +2:18
|
||||
+ discriminant(_0) = 0; // scope 0 at $DIR/deaggregator_test_enum_2.rs:+2:9: +2:18
|
||||
StorageDead(_4); // scope 0 at $DIR/deaggregator_test_enum_2.rs:+2:17: +2:18
|
||||
goto -> bb3; // scope 0 at $DIR/deaggregator_test_enum_2.rs:+1:5: +5:6
|
||||
}
|
||||
|
||||
bb2: {
|
||||
StorageLive(_5); // scope 0 at $DIR/deaggregator_test_enum_2.rs:+4:16: +4:17
|
||||
_5 = _2; // scope 0 at $DIR/deaggregator_test_enum_2.rs:+4:16: +4:17
|
||||
- _0 = Foo::B(move _5); // scope 0 at $DIR/deaggregator_test_enum_2.rs:+4:9: +4:18
|
||||
+ Deinit(_0); // scope 0 at $DIR/deaggregator_test_enum_2.rs:+4:9: +4:18
|
||||
+ ((_0 as B).0: i32) = move _5; // scope 0 at $DIR/deaggregator_test_enum_2.rs:+4:9: +4:18
|
||||
+ discriminant(_0) = 1; // scope 0 at $DIR/deaggregator_test_enum_2.rs:+4:9: +4:18
|
||||
StorageDead(_5); // scope 0 at $DIR/deaggregator_test_enum_2.rs:+4:17: +4:18
|
||||
goto -> bb3; // scope 0 at $DIR/deaggregator_test_enum_2.rs:+1:5: +5:6
|
||||
}
|
||||
|
||||
bb3: {
|
||||
StorageDead(_3); // scope 0 at $DIR/deaggregator_test_enum_2.rs:+5:5: +5:6
|
||||
return; // scope 0 at $DIR/deaggregator_test_enum_2.rs:+6:2: +6:2
|
||||
}
|
||||
}
|
||||
|
@ -1,17 +0,0 @@
|
||||
// unit-test: Deaggregator
|
||||
// Test that deaggregate fires more than once per block
|
||||
|
||||
enum Foo {
|
||||
A(i32),
|
||||
B,
|
||||
}
|
||||
|
||||
// EMIT_MIR deaggregator_test_multiple.test.Deaggregator.diff
|
||||
fn test(x: i32) -> [Foo; 2] {
|
||||
[Foo::A(x), Foo::A(x)]
|
||||
}
|
||||
|
||||
fn main() {
|
||||
// Make sure the function actually gets instantiated.
|
||||
test(0);
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
- // MIR for `test` before Deaggregator
|
||||
+ // MIR for `test` after Deaggregator
|
||||
|
||||
fn test(_1: i32) -> [Foo; 2] {
|
||||
debug x => _1; // in scope 0 at $DIR/deaggregator_test_multiple.rs:+0:9: +0:10
|
||||
let mut _0: [Foo; 2]; // return place in scope 0 at $DIR/deaggregator_test_multiple.rs:+0:20: +0:28
|
||||
let mut _2: Foo; // in scope 0 at $DIR/deaggregator_test_multiple.rs:+1:6: +1:15
|
||||
let mut _3: i32; // in scope 0 at $DIR/deaggregator_test_multiple.rs:+1:13: +1:14
|
||||
let mut _4: Foo; // in scope 0 at $DIR/deaggregator_test_multiple.rs:+1:17: +1:26
|
||||
let mut _5: i32; // in scope 0 at $DIR/deaggregator_test_multiple.rs:+1:24: +1:25
|
||||
|
||||
bb0: {
|
||||
StorageLive(_2); // scope 0 at $DIR/deaggregator_test_multiple.rs:+1:6: +1:15
|
||||
StorageLive(_3); // scope 0 at $DIR/deaggregator_test_multiple.rs:+1:13: +1:14
|
||||
_3 = _1; // scope 0 at $DIR/deaggregator_test_multiple.rs:+1:13: +1:14
|
||||
- _2 = Foo::A(move _3); // scope 0 at $DIR/deaggregator_test_multiple.rs:+1:6: +1:15
|
||||
+ Deinit(_2); // scope 0 at $DIR/deaggregator_test_multiple.rs:+1:6: +1:15
|
||||
+ ((_2 as A).0: i32) = move _3; // scope 0 at $DIR/deaggregator_test_multiple.rs:+1:6: +1:15
|
||||
+ discriminant(_2) = 0; // scope 0 at $DIR/deaggregator_test_multiple.rs:+1:6: +1:15
|
||||
StorageDead(_3); // scope 0 at $DIR/deaggregator_test_multiple.rs:+1:14: +1:15
|
||||
StorageLive(_4); // scope 0 at $DIR/deaggregator_test_multiple.rs:+1:17: +1:26
|
||||
StorageLive(_5); // scope 0 at $DIR/deaggregator_test_multiple.rs:+1:24: +1:25
|
||||
_5 = _1; // scope 0 at $DIR/deaggregator_test_multiple.rs:+1:24: +1:25
|
||||
- _4 = Foo::A(move _5); // scope 0 at $DIR/deaggregator_test_multiple.rs:+1:17: +1:26
|
||||
+ Deinit(_4); // scope 0 at $DIR/deaggregator_test_multiple.rs:+1:17: +1:26
|
||||
+ ((_4 as A).0: i32) = move _5; // scope 0 at $DIR/deaggregator_test_multiple.rs:+1:17: +1:26
|
||||
+ discriminant(_4) = 0; // scope 0 at $DIR/deaggregator_test_multiple.rs:+1:17: +1:26
|
||||
StorageDead(_5); // scope 0 at $DIR/deaggregator_test_multiple.rs:+1:25: +1:26
|
||||
_0 = [move _2, move _4]; // scope 0 at $DIR/deaggregator_test_multiple.rs:+1:5: +1:27
|
||||
StorageDead(_4); // scope 0 at $DIR/deaggregator_test_multiple.rs:+1:26: +1:27
|
||||
StorageDead(_2); // scope 0 at $DIR/deaggregator_test_multiple.rs:+1:26: +1:27
|
||||
return; // scope 0 at $DIR/deaggregator_test_multiple.rs:+2:2: +2:2
|
||||
}
|
||||
}
|
||||
|
@ -25,9 +25,7 @@
|
||||
_4 = _1; // scope 0 at $DIR/early_otherwise_branch.rs:+1:12: +1:13
|
||||
StorageLive(_5); // scope 0 at $DIR/early_otherwise_branch.rs:+1:15: +1:16
|
||||
_5 = _2; // scope 0 at $DIR/early_otherwise_branch.rs:+1:15: +1:16
|
||||
Deinit(_3); // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
|
||||
(_3.0: std::option::Option<u32>) = move _4; // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
|
||||
(_3.1: std::option::Option<u32>) = move _5; // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
|
||||
_3 = (move _4, move _5); // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
|
||||
StorageDead(_5); // scope 0 at $DIR/early_otherwise_branch.rs:+1:16: +1:17
|
||||
StorageDead(_4); // scope 0 at $DIR/early_otherwise_branch.rs:+1:16: +1:17
|
||||
_7 = discriminant((_3.0: std::option::Option<u32>)); // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
|
||||
|
@ -26,9 +26,7 @@
|
||||
_4 = _1; // scope 0 at $DIR/early_otherwise_branch.rs:+1:12: +1:13
|
||||
StorageLive(_5); // scope 0 at $DIR/early_otherwise_branch.rs:+1:15: +1:16
|
||||
_5 = _2; // scope 0 at $DIR/early_otherwise_branch.rs:+1:15: +1:16
|
||||
Deinit(_3); // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
|
||||
(_3.0: std::option::Option<u32>) = move _4; // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
|
||||
(_3.1: std::option::Option<u32>) = move _5; // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
|
||||
_3 = (move _4, move _5); // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
|
||||
StorageDead(_5); // scope 0 at $DIR/early_otherwise_branch.rs:+1:16: +1:17
|
||||
StorageDead(_4); // scope 0 at $DIR/early_otherwise_branch.rs:+1:16: +1:17
|
||||
_8 = discriminant((_3.0: std::option::Option<u32>)); // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
|
||||
|
@ -25,9 +25,7 @@
|
||||
_4 = _1; // scope 0 at $DIR/early_otherwise_branch.rs:+1:12: +1:13
|
||||
StorageLive(_5); // scope 0 at $DIR/early_otherwise_branch.rs:+1:15: +1:16
|
||||
_5 = _2; // scope 0 at $DIR/early_otherwise_branch.rs:+1:15: +1:16
|
||||
Deinit(_3); // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
|
||||
(_3.0: std::option::Option<u32>) = move _4; // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
|
||||
(_3.1: std::option::Option<bool>) = move _5; // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
|
||||
_3 = (move _4, move _5); // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
|
||||
StorageDead(_5); // scope 0 at $DIR/early_otherwise_branch.rs:+1:16: +1:17
|
||||
StorageDead(_4); // scope 0 at $DIR/early_otherwise_branch.rs:+1:16: +1:17
|
||||
_7 = discriminant((_3.0: std::option::Option<u32>)); // scope 0 at $DIR/early_otherwise_branch.rs:+1:11: +1:17
|
||||
|
@ -34,10 +34,7 @@
|
||||
_6 = _2; // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:15: +1:16
|
||||
StorageLive(_7); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:18: +1:19
|
||||
_7 = _3; // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:18: +1:19
|
||||
Deinit(_4); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:11: +1:20
|
||||
(_4.0: std::option::Option<u32>) = move _5; // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:11: +1:20
|
||||
(_4.1: std::option::Option<u32>) = move _6; // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:11: +1:20
|
||||
(_4.2: std::option::Option<u32>) = move _7; // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:11: +1:20
|
||||
_4 = (move _5, move _6, move _7); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:11: +1:20
|
||||
StorageDead(_7); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:19: +1:20
|
||||
StorageDead(_6); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:19: +1:20
|
||||
StorageDead(_5); // scope 0 at $DIR/early_otherwise_branch_3_element_tuple.rs:+1:19: +1:20
|
||||
|
@ -73,9 +73,7 @@
|
||||
_5 = _1; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:15: +5:16
|
||||
StorageLive(_6); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:18: +5:23
|
||||
_6 = _2; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:18: +5:23
|
||||
Deinit(_4); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
||||
(_4.0: &ViewportPercentageLength) = move _5; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
||||
(_4.1: &ViewportPercentageLength) = move _6; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
||||
_4 = (move _5, move _6); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
||||
StorageDead(_6); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:23: +5:24
|
||||
StorageDead(_5); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:23: +5:24
|
||||
_34 = deref_copy (_4.0: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
||||
@ -91,10 +89,8 @@
|
||||
|
||||
bb2: {
|
||||
StorageLive(_33); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:25: +10:27
|
||||
Deinit(_33); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:25: +10:27
|
||||
Deinit(_0); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:21: +10:28
|
||||
((_0 as Err).0: ()) = move _33; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:21: +10:28
|
||||
discriminant(_0) = 1; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:21: +10:28
|
||||
_33 = (); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:25: +10:27
|
||||
_0 = Result::<ViewportPercentageLength, ()>::Err(move _33); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:21: +10:28
|
||||
StorageDead(_33); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:27: +10:28
|
||||
StorageDead(_3); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+11:6: +11:7
|
||||
StorageDead(_4); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:1: +12:2
|
||||
@ -134,9 +130,7 @@
|
||||
_14 = Add(move _15, move _16); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:38: +6:49
|
||||
StorageDead(_16); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:48: +6:49
|
||||
StorageDead(_15); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:48: +6:49
|
||||
Deinit(_3); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:35: +6:50
|
||||
((_3 as Vw).0: f32) = move _14; // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:35: +6:50
|
||||
discriminant(_3) = 0; // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:35: +6:50
|
||||
_3 = ViewportPercentageLength::Vw(move _14); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:35: +6:50
|
||||
StorageDead(_14); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:49: +6:50
|
||||
StorageDead(_13); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:49: +6:50
|
||||
StorageDead(_12); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:49: +6:50
|
||||
@ -158,9 +152,7 @@
|
||||
_19 = Add(move _20, move _21); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:38: +7:49
|
||||
StorageDead(_21); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:48: +7:49
|
||||
StorageDead(_20); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:48: +7:49
|
||||
Deinit(_3); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:35: +7:50
|
||||
((_3 as Vh).0: f32) = move _19; // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:35: +7:50
|
||||
discriminant(_3) = 1; // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:35: +7:50
|
||||
_3 = ViewportPercentageLength::Vh(move _19); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:35: +7:50
|
||||
StorageDead(_19); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:49: +7:50
|
||||
StorageDead(_18); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:49: +7:50
|
||||
StorageDead(_17); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:49: +7:50
|
||||
@ -182,9 +174,7 @@
|
||||
_24 = Add(move _25, move _26); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:44: +8:55
|
||||
StorageDead(_26); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:54: +8:55
|
||||
StorageDead(_25); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:54: +8:55
|
||||
Deinit(_3); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:39: +8:56
|
||||
((_3 as Vmin).0: f32) = move _24; // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:39: +8:56
|
||||
discriminant(_3) = 2; // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:39: +8:56
|
||||
_3 = ViewportPercentageLength::Vmin(move _24); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:39: +8:56
|
||||
StorageDead(_24); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:55: +8:56
|
||||
StorageDead(_23); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:55: +8:56
|
||||
StorageDead(_22); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:55: +8:56
|
||||
@ -206,9 +196,7 @@
|
||||
_29 = Add(move _30, move _31); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:44: +9:55
|
||||
StorageDead(_31); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:54: +9:55
|
||||
StorageDead(_30); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:54: +9:55
|
||||
Deinit(_3); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:39: +9:56
|
||||
((_3 as Vmax).0: f32) = move _29; // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:39: +9:56
|
||||
discriminant(_3) = 3; // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:39: +9:56
|
||||
_3 = ViewportPercentageLength::Vmax(move _29); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:39: +9:56
|
||||
StorageDead(_29); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:55: +9:56
|
||||
StorageDead(_28); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:55: +9:56
|
||||
StorageDead(_27); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:55: +9:56
|
||||
@ -216,9 +204,7 @@
|
||||
}
|
||||
|
||||
bb10: {
|
||||
Deinit(_0); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:5: +11:7
|
||||
((_0 as Ok).0: ViewportPercentageLength) = move _3; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:5: +11:7
|
||||
discriminant(_0) = 0; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:5: +11:7
|
||||
_0 = Result::<ViewportPercentageLength, ()>::Ok(move _3); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:5: +11:7
|
||||
StorageDead(_3); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+11:6: +11:7
|
||||
StorageDead(_4); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:1: +12:2
|
||||
goto -> bb11; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:2: +12:2
|
||||
|
@ -32,9 +32,7 @@
|
||||
_4 = _1; // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:12: +1:13
|
||||
StorageLive(_5); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:15: +1:16
|
||||
_5 = _2; // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:15: +1:16
|
||||
Deinit(_3); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:11: +1:17
|
||||
(_3.0: std::option::Option<u32>) = move _4; // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:11: +1:17
|
||||
(_3.1: std::option::Option<u32>) = move _5; // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:11: +1:17
|
||||
_3 = (move _4, move _5); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:11: +1:17
|
||||
StorageDead(_5); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:16: +1:17
|
||||
StorageDead(_4); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:16: +1:17
|
||||
_8 = discriminant((_3.0: std::option::Option<u32>)); // scope 0 at $DIR/early_otherwise_branch_noopt.rs:+1:11: +1:17
|
||||
|
@ -51,14 +51,20 @@
|
||||
}
|
||||
|
||||
bb2: {
|
||||
Deinit(_6); // scope 1 at $DIR/funky_arms.rs:+10:17: +10:41
|
||||
discriminant(_6) = 1; // scope 1 at $DIR/funky_arms.rs:+10:17: +10:41
|
||||
- _6 = MinusPlus; // scope 1 at $DIR/funky_arms.rs:+10:17: +10:41
|
||||
+ _6 = const MinusPlus; // scope 1 at $DIR/funky_arms.rs:+10:17: +10:41
|
||||
+ // mir::Constant
|
||||
+ // + span: $DIR/funky_arms.rs:21:17: 21:41
|
||||
+ // + literal: Const { ty: Sign, val: Value(Scalar(0x01)) }
|
||||
goto -> bb4; // scope 1 at $DIR/funky_arms.rs:+10:17: +10:41
|
||||
}
|
||||
|
||||
bb3: {
|
||||
Deinit(_6); // scope 1 at $DIR/funky_arms.rs:+9:18: +9:38
|
||||
discriminant(_6) = 0; // scope 1 at $DIR/funky_arms.rs:+9:18: +9:38
|
||||
- _6 = Minus; // scope 1 at $DIR/funky_arms.rs:+9:18: +9:38
|
||||
+ _6 = const Minus; // scope 1 at $DIR/funky_arms.rs:+9:18: +9:38
|
||||
+ // mir::Constant
|
||||
+ // + span: $DIR/funky_arms.rs:20:18: 20:38
|
||||
+ // + literal: Const { ty: Sign, val: Value(Scalar(0x00)) }
|
||||
goto -> bb4; // scope 1 at $DIR/funky_arms.rs:+9:18: +9:38
|
||||
}
|
||||
|
||||
|
@ -54,9 +54,7 @@ fn main::{closure#0}(_1: Pin<&mut [generator@$DIR/generator_tiny.rs:19:16: 19:24
|
||||
StorageLive(_6); // scope 1 at $DIR/generator_tiny.rs:+3:13: +3:18
|
||||
StorageLive(_7); // scope 1 at $DIR/generator_tiny.rs:+3:13: +3:18
|
||||
_7 = (); // scope 1 at $DIR/generator_tiny.rs:+3:13: +3:18
|
||||
Deinit(_0); // scope 1 at $DIR/generator_tiny.rs:+3:13: +3:18
|
||||
((_0 as Yielded).0: ()) = move _7; // scope 1 at $DIR/generator_tiny.rs:+3:13: +3:18
|
||||
discriminant(_0) = 0; // scope 1 at $DIR/generator_tiny.rs:+3:13: +3:18
|
||||
_0 = GeneratorState::<(), ()>::Yielded(move _7); // scope 1 at $DIR/generator_tiny.rs:+3:13: +3:18
|
||||
discriminant((*(_1.0: &mut [generator@$DIR/generator_tiny.rs:19:16: 19:24]))) = 3; // scope 1 at $DIR/generator_tiny.rs:+3:13: +3:18
|
||||
return; // scope 1 at $DIR/generator_tiny.rs:+3:13: +3:18
|
||||
}
|
||||
|
@ -13,7 +13,7 @@
|
||||
StorageLive(_3); // scope 0 at $DIR/cycle.rs:+1:5: +1:6
|
||||
_3 = &_1; // scope 0 at $DIR/cycle.rs:+1:5: +1:6
|
||||
StorageLive(_4); // scope 0 at $DIR/cycle.rs:+1:5: +1:8
|
||||
Deinit(_4); // scope 0 at $DIR/cycle.rs:+1:5: +1:8
|
||||
_4 = (); // scope 0 at $DIR/cycle.rs:+1:5: +1:8
|
||||
_2 = <impl Fn() as Fn<()>>::call(move _3, move _4) -> [return: bb1, unwind: bb3]; // scope 0 at $DIR/cycle.rs:+1:5: +1:8
|
||||
// mir::Constant
|
||||
// + span: $DIR/cycle.rs:6:5: 6:6
|
||||
|
@ -21,7 +21,15 @@ fn foo(_1: T, _2: i32) -> i32 {
|
||||
|
||||
bb0: {
|
||||
StorageLive(_3); // scope 0 at $DIR/inline_closure.rs:+1:9: +1:10
|
||||
Deinit(_3); // scope 0 at $DIR/inline_closure.rs:+1:13: +1:24
|
||||
_3 = [closure@foo::<T>::{closure#0}]; // scope 0 at $DIR/inline_closure.rs:+1:13: +1:24
|
||||
// closure
|
||||
// + def_id: DefId(0:6 ~ inline_closure[92ba]::foo::{closure#0})
|
||||
// + substs: [
|
||||
// T,
|
||||
// i8,
|
||||
// extern "rust-call" fn((i32, i32)) -> i32,
|
||||
// (),
|
||||
// ]
|
||||
StorageLive(_4); // scope 1 at $DIR/inline_closure.rs:+2:5: +2:6
|
||||
_4 = &_3; // scope 1 at $DIR/inline_closure.rs:+2:5: +2:6
|
||||
StorageLive(_5); // scope 1 at $DIR/inline_closure.rs:+2:5: +2:12
|
||||
@ -29,9 +37,7 @@ fn foo(_1: T, _2: i32) -> i32 {
|
||||
_6 = _2; // scope 1 at $DIR/inline_closure.rs:+2:7: +2:8
|
||||
StorageLive(_7); // scope 1 at $DIR/inline_closure.rs:+2:10: +2:11
|
||||
_7 = _2; // scope 1 at $DIR/inline_closure.rs:+2:10: +2:11
|
||||
Deinit(_5); // scope 1 at $DIR/inline_closure.rs:+2:5: +2:12
|
||||
(_5.0: i32) = move _6; // scope 1 at $DIR/inline_closure.rs:+2:5: +2:12
|
||||
(_5.1: i32) = move _7; // scope 1 at $DIR/inline_closure.rs:+2:5: +2:12
|
||||
_5 = (move _6, move _7); // scope 1 at $DIR/inline_closure.rs:+2:5: +2:12
|
||||
StorageLive(_8); // scope 1 at $DIR/inline_closure.rs:+2:5: +2:12
|
||||
_8 = move (_5.0: i32); // scope 1 at $DIR/inline_closure.rs:+2:5: +2:12
|
||||
StorageLive(_9); // scope 1 at $DIR/inline_closure.rs:+2:5: +2:12
|
||||
|
@ -24,7 +24,15 @@ fn foo(_1: T, _2: &i32) -> i32 {
|
||||
|
||||
bb0: {
|
||||
StorageLive(_3); // scope 0 at $DIR/inline_closure_borrows_arg.rs:+1:9: +1:10
|
||||
Deinit(_3); // scope 0 at $DIR/inline_closure_borrows_arg.rs:+1:13: +4:6
|
||||
_3 = [closure@foo::<T>::{closure#0}]; // scope 0 at $DIR/inline_closure_borrows_arg.rs:+1:13: +4:6
|
||||
// closure
|
||||
// + def_id: DefId(0:6 ~ inline_closure_borrows_arg[96e9]::foo::{closure#0})
|
||||
// + substs: [
|
||||
// T,
|
||||
// i8,
|
||||
// for<'a, 'b> extern "rust-call" fn((&'a i32, &'b i32)) -> i32,
|
||||
// (),
|
||||
// ]
|
||||
StorageLive(_4); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:6
|
||||
_4 = &_3; // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:6
|
||||
StorageLive(_5); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:12
|
||||
@ -32,9 +40,7 @@ fn foo(_1: T, _2: &i32) -> i32 {
|
||||
_6 = &(*_2); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:7: +5:8
|
||||
StorageLive(_7); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:10: +5:11
|
||||
_7 = &(*_2); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:10: +5:11
|
||||
Deinit(_5); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:12
|
||||
(_5.0: &i32) = move _6; // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:12
|
||||
(_5.1: &i32) = move _7; // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:12
|
||||
_5 = (move _6, move _7); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:12
|
||||
StorageLive(_8); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:12
|
||||
_8 = move (_5.0: &i32); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:12
|
||||
StorageLive(_9); // scope 1 at $DIR/inline_closure_borrows_arg.rs:+5:5: +5:12
|
||||
|
@ -30,9 +30,15 @@ fn foo(_1: T, _2: i32) -> (i32, T) {
|
||||
_4 = &_2; // scope 0 at $DIR/inline_closure_captures.rs:+1:13: +1:24
|
||||
StorageLive(_5); // scope 0 at $DIR/inline_closure_captures.rs:+1:13: +1:24
|
||||
_5 = &_1; // scope 0 at $DIR/inline_closure_captures.rs:+1:13: +1:24
|
||||
Deinit(_3); // scope 0 at $DIR/inline_closure_captures.rs:+1:13: +1:24
|
||||
(_3.0: &i32) = move _4; // scope 0 at $DIR/inline_closure_captures.rs:+1:13: +1:24
|
||||
(_3.1: &T) = move _5; // scope 0 at $DIR/inline_closure_captures.rs:+1:13: +1:24
|
||||
_3 = [closure@foo::<T>::{closure#0}] { q: move _4, t: move _5 }; // scope 0 at $DIR/inline_closure_captures.rs:+1:13: +1:24
|
||||
// closure
|
||||
// + def_id: DefId(0:6 ~ inline_closure_captures[8bc0]::foo::{closure#0})
|
||||
// + substs: [
|
||||
// T,
|
||||
// i8,
|
||||
// extern "rust-call" fn((i32,)) -> (i32, T),
|
||||
// (&i32, &T),
|
||||
// ]
|
||||
StorageDead(_5); // scope 0 at $DIR/inline_closure_captures.rs:+1:16: +1:17
|
||||
StorageDead(_4); // scope 0 at $DIR/inline_closure_captures.rs:+1:16: +1:17
|
||||
StorageLive(_6); // scope 1 at $DIR/inline_closure_captures.rs:+2:5: +2:6
|
||||
@ -40,8 +46,7 @@ fn foo(_1: T, _2: i32) -> (i32, T) {
|
||||
StorageLive(_7); // scope 1 at $DIR/inline_closure_captures.rs:+2:5: +2:9
|
||||
StorageLive(_8); // scope 1 at $DIR/inline_closure_captures.rs:+2:7: +2:8
|
||||
_8 = _2; // scope 1 at $DIR/inline_closure_captures.rs:+2:7: +2:8
|
||||
Deinit(_7); // scope 1 at $DIR/inline_closure_captures.rs:+2:5: +2:9
|
||||
(_7.0: i32) = move _8; // scope 1 at $DIR/inline_closure_captures.rs:+2:5: +2:9
|
||||
_7 = (move _8,); // scope 1 at $DIR/inline_closure_captures.rs:+2:5: +2:9
|
||||
StorageLive(_9); // scope 1 at $DIR/inline_closure_captures.rs:+2:5: +2:9
|
||||
_9 = move (_7.0: i32); // scope 1 at $DIR/inline_closure_captures.rs:+2:5: +2:9
|
||||
StorageLive(_10); // scope 2 at $DIR/inline_closure_captures.rs:+1:19: +1:20
|
||||
@ -50,9 +55,7 @@ fn foo(_1: T, _2: i32) -> (i32, T) {
|
||||
StorageLive(_11); // scope 2 at $DIR/inline_closure_captures.rs:+1:22: +1:23
|
||||
_13 = deref_copy ((*_6).1: &T); // scope 2 at $DIR/inline_closure_captures.rs:+1:22: +1:23
|
||||
_11 = (*_13); // scope 2 at $DIR/inline_closure_captures.rs:+1:22: +1:23
|
||||
Deinit(_0); // scope 2 at $DIR/inline_closure_captures.rs:+1:18: +1:24
|
||||
(_0.0: i32) = move _10; // scope 2 at $DIR/inline_closure_captures.rs:+1:18: +1:24
|
||||
(_0.1: T) = move _11; // scope 2 at $DIR/inline_closure_captures.rs:+1:18: +1:24
|
||||
_0 = (move _10, move _11); // scope 2 at $DIR/inline_closure_captures.rs:+1:18: +1:24
|
||||
StorageDead(_11); // scope 2 at $DIR/inline_closure_captures.rs:+1:23: +1:24
|
||||
StorageDead(_10); // scope 2 at $DIR/inline_closure_captures.rs:+1:23: +1:24
|
||||
StorageDead(_9); // scope 1 at $DIR/inline_closure_captures.rs:+2:5: +2:9
|
||||
|
@ -48,9 +48,7 @@
|
||||
+ StorageDead(_6); // scope 2 at $DIR/inline_diverging.rs:28:15: 28:16
|
||||
+ StorageLive(_8); // scope 3 at $DIR/inline_diverging.rs:29:6: 29:7
|
||||
+ _8 = move _3; // scope 3 at $DIR/inline_diverging.rs:29:6: 29:7
|
||||
+ Deinit(_1); // scope 3 at $DIR/inline_diverging.rs:29:5: 29:11
|
||||
+ (_1.0: !) = move _8; // scope 3 at $DIR/inline_diverging.rs:29:5: 29:11
|
||||
+ (_1.1: !) = move _9; // scope 3 at $DIR/inline_diverging.rs:29:5: 29:11
|
||||
+ _1 = (move _8, move _9); // scope 3 at $DIR/inline_diverging.rs:29:5: 29:11
|
||||
+ StorageDead(_8); // scope 3 at $DIR/inline_diverging.rs:29:10: 29:11
|
||||
+ StorageDead(_3); // scope 1 at $DIR/inline_diverging.rs:30:1: 30:2
|
||||
+ drop(_2) -> bb2; // scope 1 at $DIR/inline_diverging.rs:30:1: 30:2
|
||||
|
@ -44,8 +44,17 @@
|
||||
- }
|
||||
-
|
||||
- bb1: {
|
||||
+ Deinit(_4); // scope 2 at $DIR/inline_generator.rs:15:5: 15:41
|
||||
+ discriminant(_4) = 0; // scope 2 at $DIR/inline_generator.rs:15:5: 15:41
|
||||
+ _4 = [generator@$DIR/inline_generator.rs:15:5: 15:8 (#0)]; // scope 2 at $DIR/inline_generator.rs:15:5: 15:41
|
||||
+ // generator
|
||||
+ // + def_id: DefId(0:7 ~ inline_generator[ea31]::g::{closure#0})
|
||||
+ // + substs: [
|
||||
+ // bool,
|
||||
+ // i32,
|
||||
+ // bool,
|
||||
+ // {bool, i32},
|
||||
+ // (),
|
||||
+ // ]
|
||||
+ // + movability: Movable
|
||||
_3 = &mut _4; // scope 0 at $DIR/inline_generator.rs:+1:23: +1:31
|
||||
- _2 = Pin::<&mut [generator@$DIR/inline_generator.rs:15:5: 15:8]>::new(move _3) -> [return: bb2, unwind: bb4]; // scope 0 at $DIR/inline_generator.rs:+1:14: +1:32
|
||||
- // mir::Constant
|
||||
@ -59,8 +68,7 @@
|
||||
+ _5 = move _3; // scope 4 at $SRC_DIR/core/src/pin.rs:LL:COL
|
||||
+ StorageLive(_6); // scope 5 at $SRC_DIR/core/src/pin.rs:LL:COL
|
||||
+ _6 = move _5; // scope 5 at $SRC_DIR/core/src/pin.rs:LL:COL
|
||||
+ Deinit(_2); // scope 5 at $SRC_DIR/core/src/pin.rs:LL:COL
|
||||
+ (_2.0: &mut [generator@$DIR/inline_generator.rs:15:5: 15:8]) = move _6; // scope 5 at $SRC_DIR/core/src/pin.rs:LL:COL
|
||||
+ _2 = Pin::<&mut [generator@$DIR/inline_generator.rs:15:5: 15:8]> { pointer: move _6 }; // scope 5 at $SRC_DIR/core/src/pin.rs:LL:COL
|
||||
+ StorageDead(_6); // scope 5 at $SRC_DIR/core/src/pin.rs:LL:COL
|
||||
+ StorageDead(_5); // scope 4 at $SRC_DIR/core/src/pin.rs:LL:COL
|
||||
StorageDead(_3); // scope 0 at $DIR/inline_generator.rs:+1:31: +1:32
|
||||
@ -106,9 +114,7 @@
|
||||
+ }
|
||||
+
|
||||
+ bb6: {
|
||||
+ Deinit(_1); // scope 6 at $DIR/inline_generator.rs:15:11: 15:39
|
||||
+ ((_1 as Yielded).0: i32) = move _8; // scope 6 at $DIR/inline_generator.rs:15:11: 15:39
|
||||
+ discriminant(_1) = 0; // scope 6 at $DIR/inline_generator.rs:15:11: 15:39
|
||||
+ _1 = GeneratorState::<i32, bool>::Yielded(move _8); // scope 6 at $DIR/inline_generator.rs:15:11: 15:39
|
||||
+ _11 = deref_copy (_2.0: &mut [generator@$DIR/inline_generator.rs:15:5: 15:8]); // scope 6 at $DIR/inline_generator.rs:15:11: 15:39
|
||||
+ discriminant((*_11)) = 3; // scope 6 at $DIR/inline_generator.rs:15:11: 15:39
|
||||
+ goto -> bb1; // scope 0 at $DIR/inline_generator.rs:15:11: 15:39
|
||||
@ -117,9 +123,7 @@
|
||||
+ bb7: {
|
||||
+ StorageLive(_8); // scope 6 at $DIR/inline_generator.rs:15:5: 15:41
|
||||
+ StorageDead(_8); // scope 6 at $DIR/inline_generator.rs:15:38: 15:39
|
||||
+ Deinit(_1); // scope 6 at $DIR/inline_generator.rs:15:41: 15:41
|
||||
+ ((_1 as Complete).0: bool) = _7; // scope 6 at $DIR/inline_generator.rs:15:41: 15:41
|
||||
+ discriminant(_1) = 1; // scope 6 at $DIR/inline_generator.rs:15:41: 15:41
|
||||
+ _1 = GeneratorState::<i32, bool>::Complete(_7); // scope 6 at $DIR/inline_generator.rs:15:41: 15:41
|
||||
+ _12 = deref_copy (_2.0: &mut [generator@$DIR/inline_generator.rs:15:5: 15:8]); // scope 6 at $DIR/inline_generator.rs:15:41: 15:41
|
||||
+ discriminant((*_12)) = 1; // scope 6 at $DIR/inline_generator.rs:15:41: 15:41
|
||||
+ goto -> bb1; // scope 0 at $DIR/inline_generator.rs:15:41: 15:41
|
||||
|
@ -51,9 +51,7 @@
|
||||
+ // + span: $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
||||
+ // + user_ty: UserType(0)
|
||||
+ // + literal: Const { ty: alloc::raw_vec::RawVec<u32>, val: Unevaluated(alloc::raw_vec::RawVec::<T>::NEW, [u32], None) }
|
||||
+ Deinit(_9); // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
||||
+ (_9.0: alloc::raw_vec::RawVec<u32>) = move _10; // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
||||
+ (_9.1: usize) = const 0_usize; // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
||||
+ _9 = Vec::<u32> { buf: move _10, len: const 0_usize }; // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
||||
+ StorageDead(_10); // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
||||
+ (*_8) = move _9; // scope 0 at $DIR/inline_into_box_place.rs:+1:33: +1:43
|
||||
+ StorageDead(_9); // scope 0 at $DIR/inline_into_box_place.rs:+1:33: +1:43
|
||||
|
@ -20,14 +20,20 @@ fn main() -> () {
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/issue_76997_inline_scopes_parenting.rs:+1:9: +1:10
|
||||
Deinit(_1); // scope 0 at $DIR/issue_76997_inline_scopes_parenting.rs:+1:13: +1:33
|
||||
_1 = [closure@$DIR/issue_76997_inline_scopes_parenting.rs:5:13: 5:16]; // scope 0 at $DIR/issue_76997_inline_scopes_parenting.rs:+1:13: +1:33
|
||||
// closure
|
||||
// + def_id: DefId(0:4 ~ issue_76997_inline_scopes_parenting[bc59]::main::{closure#0})
|
||||
// + substs: [
|
||||
// i8,
|
||||
// extern "rust-call" fn(((),)),
|
||||
// (),
|
||||
// ]
|
||||
StorageLive(_2); // scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:5: +2:6
|
||||
_2 = &_1; // scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:5: +2:6
|
||||
StorageLive(_3); // scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:5: +2:10
|
||||
StorageLive(_4); // scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:7: +2:9
|
||||
Deinit(_4); // scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:7: +2:9
|
||||
Deinit(_3); // scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:5: +2:10
|
||||
(_3.0: ()) = move _4; // scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:5: +2:10
|
||||
_4 = (); // scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:7: +2:9
|
||||
_3 = (move _4,); // scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:5: +2:10
|
||||
StorageLive(_5); // scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:5: +2:10
|
||||
_5 = move (_3.0: ()); // scope 1 at $DIR/issue_76997_inline_scopes_parenting.rs:+2:5: +2:10
|
||||
StorageLive(_6); // scope 2 at $DIR/issue_76997_inline_scopes_parenting.rs:+1:23: +1:24
|
||||
|
@ -25,7 +25,7 @@
|
||||
bb1: {
|
||||
_3 = &_4; // scope 0 at $DIR/issue_78442.rs:+4:5: +4:15
|
||||
StorageLive(_5); // scope 0 at $DIR/issue_78442.rs:+4:5: +4:17
|
||||
Deinit(_5); // scope 0 at $DIR/issue_78442.rs:+4:5: +4:17
|
||||
_5 = (); // scope 0 at $DIR/issue_78442.rs:+4:5: +4:17
|
||||
- _2 = <fn() {foo} as Fn<()>>::call(move _3, move _5) -> [return: bb2, unwind: bb4]; // scope 0 at $DIR/issue_78442.rs:+4:5: +4:17
|
||||
- // mir::Constant
|
||||
- // + span: $DIR/issue_78442.rs:11:5: 11:15
|
||||
|
@ -24,7 +24,7 @@
|
||||
bb1: {
|
||||
_3 = &_4; // scope 0 at $DIR/issue_78442.rs:+4:5: +4:15
|
||||
StorageLive(_5); // scope 0 at $DIR/issue_78442.rs:+4:5: +4:17
|
||||
Deinit(_5); // scope 0 at $DIR/issue_78442.rs:+4:5: +4:17
|
||||
_5 = (); // scope 0 at $DIR/issue_78442.rs:+4:5: +4:17
|
||||
- _2 = <impl Fn() as Fn<()>>::call(move _3, move _5) -> [return: bb2, unwind: bb4]; // scope 0 at $DIR/issue_78442.rs:+4:5: +4:17
|
||||
+ _2 = <fn() {foo} as Fn<()>>::call(move _3, move _5) -> [return: bb2, unwind: bb4]; // scope 0 at $DIR/issue_78442.rs:+4:5: +4:17
|
||||
// mir::Constant
|
||||
|
@ -67,17 +67,14 @@
|
||||
|
||||
bb7: {
|
||||
StorageDead(_6); // scope 4 at $DIR/issue_75439.rs:+5:35: +5:36
|
||||
Deinit(_0); // scope 3 at $DIR/issue_75439.rs:+5:9: +5:39
|
||||
((_0 as Some).0: [u8; 4]) = move _5; // scope 3 at $DIR/issue_75439.rs:+5:9: +5:39
|
||||
discriminant(_0) = 1; // scope 3 at $DIR/issue_75439.rs:+5:9: +5:39
|
||||
_0 = Option::<[u8; 4]>::Some(move _5); // scope 3 at $DIR/issue_75439.rs:+5:9: +5:39
|
||||
StorageDead(_5); // scope 3 at $DIR/issue_75439.rs:+5:38: +5:39
|
||||
StorageDead(_4); // scope 1 at $DIR/issue_75439.rs:+6:5: +6:6
|
||||
goto -> bb9; // scope 1 at $DIR/issue_75439.rs:+4:5: +8:6
|
||||
}
|
||||
|
||||
bb8: {
|
||||
Deinit(_0); // scope 1 at $DIR/issue_75439.rs:+7:9: +7:13
|
||||
discriminant(_0) = 0; // scope 1 at $DIR/issue_75439.rs:+7:9: +7:13
|
||||
_0 = Option::<[u8; 4]>::None; // scope 1 at $DIR/issue_75439.rs:+7:9: +7:13
|
||||
goto -> bb9; // scope 1 at $DIR/issue_75439.rs:+4:5: +8:6
|
||||
}
|
||||
|
||||
|
@ -25,9 +25,9 @@
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/lower_intrinsics.rs:+1:9: +1:12
|
||||
Deinit(_1); // scope 0 at $DIR/lower_intrinsics.rs:+1:15: +1:17
|
||||
_1 = (); // scope 0 at $DIR/lower_intrinsics.rs:+1:15: +1:17
|
||||
StorageLive(_2); // scope 1 at $DIR/lower_intrinsics.rs:+2:9: +2:16
|
||||
Deinit(_2); // scope 1 at $DIR/lower_intrinsics.rs:+2:19: +2:21
|
||||
_2 = (); // scope 1 at $DIR/lower_intrinsics.rs:+2:19: +2:21
|
||||
StorageLive(_3); // scope 3 at $DIR/lower_intrinsics.rs:+4:9: +4:95
|
||||
StorageLive(_4); // scope 3 at $DIR/lower_intrinsics.rs:+4:29: +4:59
|
||||
StorageLive(_5); // scope 3 at $DIR/lower_intrinsics.rs:+4:29: +4:45
|
||||
|
@ -41,7 +41,7 @@
|
||||
- _3 = const false; // scope 4 at $DIR/matches_reduce_branches.rs:+16:13: +16:22
|
||||
- _4 = const false; // scope 4 at $DIR/matches_reduce_branches.rs:+17:13: +17:22
|
||||
- _5 = const true; // scope 4 at $DIR/matches_reduce_branches.rs:+18:13: +18:21
|
||||
- Deinit(_6); // scope 4 at $DIR/matches_reduce_branches.rs:+19:13: +19:15
|
||||
- _6 = (); // scope 4 at $DIR/matches_reduce_branches.rs:+19:13: +19:15
|
||||
- goto -> bb3; // scope 4 at $DIR/matches_reduce_branches.rs:+19:13: +19:15
|
||||
- }
|
||||
-
|
||||
@ -54,7 +54,7 @@
|
||||
+ _3 = Eq(_11, const 7_i32); // scope 4 at $DIR/matches_reduce_branches.rs:+9:13: +9:21
|
||||
_4 = const false; // scope 4 at $DIR/matches_reduce_branches.rs:+10:13: +10:22
|
||||
_5 = const true; // scope 4 at $DIR/matches_reduce_branches.rs:+11:13: +11:21
|
||||
Deinit(_6); // scope 4 at $DIR/matches_reduce_branches.rs:+12:13: +12:15
|
||||
_6 = (); // scope 4 at $DIR/matches_reduce_branches.rs:+12:13: +12:15
|
||||
- goto -> bb3; // scope 4 at $DIR/matches_reduce_branches.rs:+12:13: +12:15
|
||||
- }
|
||||
-
|
||||
@ -69,11 +69,7 @@
|
||||
_9 = _4; // scope 4 at $DIR/matches_reduce_branches.rs:+23:12: +23:13
|
||||
StorageLive(_10); // scope 4 at $DIR/matches_reduce_branches.rs:+23:15: +23:16
|
||||
_10 = _5; // scope 4 at $DIR/matches_reduce_branches.rs:+23:15: +23:16
|
||||
Deinit(_0); // scope 4 at $DIR/matches_reduce_branches.rs:+23:5: +23:17
|
||||
(_0.0: bool) = move _7; // scope 4 at $DIR/matches_reduce_branches.rs:+23:5: +23:17
|
||||
(_0.1: bool) = move _8; // scope 4 at $DIR/matches_reduce_branches.rs:+23:5: +23:17
|
||||
(_0.2: bool) = move _9; // scope 4 at $DIR/matches_reduce_branches.rs:+23:5: +23:17
|
||||
(_0.3: bool) = move _10; // scope 4 at $DIR/matches_reduce_branches.rs:+23:5: +23:17
|
||||
_0 = (move _7, move _8, move _9, move _10); // scope 4 at $DIR/matches_reduce_branches.rs:+23:5: +23:17
|
||||
StorageDead(_10); // scope 4 at $DIR/matches_reduce_branches.rs:+23:16: +23:17
|
||||
StorageDead(_9); // scope 4 at $DIR/matches_reduce_branches.rs:+23:16: +23:17
|
||||
StorageDead(_8); // scope 4 at $DIR/matches_reduce_branches.rs:+23:16: +23:17
|
||||
|
@ -34,7 +34,7 @@
|
||||
- }
|
||||
-
|
||||
- bb4: {
|
||||
Deinit(_0); // scope 0 at $DIR/matches_reduce_branches.rs:+2:9: +2:11
|
||||
_0 = (); // scope 0 at $DIR/matches_reduce_branches.rs:+2:9: +2:11
|
||||
- goto -> bb6; // scope 0 at $DIR/matches_reduce_branches.rs:+1:5: +3:6
|
||||
+ goto -> bb3; // scope 0 at $DIR/matches_reduce_branches.rs:+1:5: +3:6
|
||||
}
|
||||
|
@ -20,7 +20,7 @@
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/matches_reduce_branches.rs:+1:9: +1:12
|
||||
StorageLive(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+1:21: +1:23
|
||||
Deinit(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+1:21: +1:23
|
||||
_2 = (); // scope 0 at $DIR/matches_reduce_branches.rs:+1:21: +1:23
|
||||
StorageLive(_3); // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||
StorageLive(_4); // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||
StorageLive(_5); // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||
|
@ -16,20 +16,15 @@ fn main() -> () {
|
||||
StorageLive(_1); // scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:9: +1:14
|
||||
StorageLive(_2); // scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:24: +1:42
|
||||
StorageLive(_3); // scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:32: +1:41
|
||||
Deinit(_3); // scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:32: +1:41
|
||||
(_3.0: usize) = const 0_usize; // scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:32: +1:41
|
||||
Deinit(_2); // scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:24: +1:42
|
||||
(_2.0: Droppy) = move _3; // scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:24: +1:42
|
||||
_3 = Droppy(const 0_usize); // scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:32: +1:41
|
||||
_2 = Aligned(move _3); // scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:24: +1:42
|
||||
StorageDead(_3); // scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:41: +1:42
|
||||
Deinit(_1); // scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:17: +1:43
|
||||
(_1.0: Aligned) = move _2; // scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:17: +1:43
|
||||
_1 = Packed(move _2); // scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:17: +1:43
|
||||
StorageDead(_2); // scope 0 at $DIR/packed_struct_drop_aligned.rs:+1:42: +1:43
|
||||
StorageLive(_4); // scope 1 at $DIR/packed_struct_drop_aligned.rs:+2:11: +2:29
|
||||
StorageLive(_5); // scope 1 at $DIR/packed_struct_drop_aligned.rs:+2:19: +2:28
|
||||
Deinit(_5); // scope 1 at $DIR/packed_struct_drop_aligned.rs:+2:19: +2:28
|
||||
(_5.0: usize) = const 0_usize; // scope 1 at $DIR/packed_struct_drop_aligned.rs:+2:19: +2:28
|
||||
Deinit(_4); // scope 1 at $DIR/packed_struct_drop_aligned.rs:+2:11: +2:29
|
||||
(_4.0: Droppy) = move _5; // scope 1 at $DIR/packed_struct_drop_aligned.rs:+2:11: +2:29
|
||||
_5 = Droppy(const 0_usize); // scope 1 at $DIR/packed_struct_drop_aligned.rs:+2:19: +2:28
|
||||
_4 = Aligned(move _5); // scope 1 at $DIR/packed_struct_drop_aligned.rs:+2:11: +2:29
|
||||
StorageDead(_5); // scope 1 at $DIR/packed_struct_drop_aligned.rs:+2:28: +2:29
|
||||
StorageLive(_6); // scope 1 at $DIR/packed_struct_drop_aligned.rs:+2:5: +2:8
|
||||
_6 = move (_1.0: Aligned); // scope 1 at $DIR/packed_struct_drop_aligned.rs:+2:5: +2:8
|
||||
|
@ -31,9 +31,7 @@
|
||||
_1 = const 0_i32; // scope 0 at $DIR/remove_storage_markers.rs:+1:19: +1:20
|
||||
- StorageLive(_2); // scope 1 at $DIR/remove_storage_markers.rs:+2:14: +2:19
|
||||
- StorageLive(_3); // scope 1 at $DIR/remove_storage_markers.rs:+2:14: +2:19
|
||||
Deinit(_3); // scope 1 at $DIR/remove_storage_markers.rs:+2:14: +2:19
|
||||
(_3.0: i32) = const 0_i32; // scope 1 at $DIR/remove_storage_markers.rs:+2:14: +2:19
|
||||
(_3.1: i32) = const 10_i32; // scope 1 at $DIR/remove_storage_markers.rs:+2:14: +2:19
|
||||
_3 = std::ops::Range::<i32> { start: const 0_i32, end: const 10_i32 }; // scope 1 at $DIR/remove_storage_markers.rs:+2:14: +2:19
|
||||
_2 = <std::ops::Range<i32> as IntoIterator>::into_iter(move _3) -> bb1; // scope 1 at $DIR/remove_storage_markers.rs:+2:14: +2:19
|
||||
// mir::Constant
|
||||
// + span: $DIR/remove_storage_markers.rs:10:14: 10:19
|
||||
|
@ -2,9 +2,12 @@
|
||||
|
||||
fn get_union() -> Foo {
|
||||
let mut _0: Foo; // return place in scope 0 at $DIR/remove_zsts.rs:+0:19: +0:22
|
||||
let mut _1: (); // in scope 0 at $DIR/remove_zsts.rs:+1:14: +1:16
|
||||
|
||||
bb0: {
|
||||
Deinit(_0); // scope 0 at $DIR/remove_zsts.rs:+1:5: +1:18
|
||||
StorageLive(_1); // scope 0 at $DIR/remove_zsts.rs:+1:14: +1:16
|
||||
_0 = Foo { x: move _1 }; // scope 0 at $DIR/remove_zsts.rs:+1:5: +1:18
|
||||
StorageDead(_1); // scope 0 at $DIR/remove_zsts.rs:+1:17: +1:18
|
||||
return; // scope 0 at $DIR/remove_zsts.rs:+2:2: +2:2
|
||||
}
|
||||
}
|
||||
|
@ -7,11 +7,9 @@
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $DIR/remove_zsts.rs:+1:14: +1:16
|
||||
- Deinit(_1); // scope 0 at $DIR/remove_zsts.rs:+1:14: +1:16
|
||||
- _1 = (); // scope 0 at $DIR/remove_zsts.rs:+1:14: +1:16
|
||||
+ nop; // scope 0 at $DIR/remove_zsts.rs:+1:14: +1:16
|
||||
Deinit(_0); // scope 0 at $DIR/remove_zsts.rs:+1:5: +1:18
|
||||
- (_0.0: ()) = move _1; // scope 0 at $DIR/remove_zsts.rs:+1:5: +1:18
|
||||
+ nop; // scope 0 at $DIR/remove_zsts.rs:+1:5: +1:18
|
||||
_0 = Foo { x: move _1 }; // scope 0 at $DIR/remove_zsts.rs:+1:5: +1:18
|
||||
StorageDead(_1); // scope 0 at $DIR/remove_zsts.rs:+1:17: +1:18
|
||||
return; // scope 0 at $DIR/remove_zsts.rs:+2:2: +2:2
|
||||
}
|
||||
|
@ -122,9 +122,7 @@ fn array_casts() -> () {
|
||||
// + literal: Const { ty: &usize, val: Unevaluated(array_casts, [], Some(promoted[0])) }
|
||||
Retag(_35); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_18 = &(*_35); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
Deinit(_13); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
(_13.0: &usize) = move _14; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
(_13.1: &usize) = move _18; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_13 = (move _14, move _18); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
Retag(_13); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_18); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_14); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
@ -150,8 +148,7 @@ fn array_casts() -> () {
|
||||
|
||||
bb3: {
|
||||
StorageLive(_27); // scope 7 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
Deinit(_27); // scope 7 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
discriminant(_27) = 0; // scope 7 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_27 = core::panicking::AssertKind::Eq; // scope 7 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_28); // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_29); // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_29 = move _27; // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
@ -164,8 +161,7 @@ fn array_casts() -> () {
|
||||
_33 = &(*_21); // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_32 = &(*_33); // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_34); // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
Deinit(_34); // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
discriminant(_34) = 0; // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_34 = Option::<Arguments<'_>>::None; // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
Retag(_34); // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_28 = core::panicking::assert_failed::<usize, usize>(move _29, move _30, move _32, move _34); // scope 8 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
// mir::Constant
|
||||
|
@ -62,8 +62,7 @@ fn main() -> () {
|
||||
StorageLive(_3); // scope 1 at $DIR/retag.rs:+3:13: +3:14
|
||||
StorageLive(_4); // scope 1 at $DIR/retag.rs:+3:17: +3:36
|
||||
StorageLive(_5); // scope 1 at $DIR/retag.rs:+3:17: +3:24
|
||||
Deinit(_5); // scope 1 at $DIR/retag.rs:+3:17: +3:24
|
||||
(_5.0: i32) = const 0_i32; // scope 1 at $DIR/retag.rs:+3:17: +3:24
|
||||
_5 = Test(const 0_i32); // scope 1 at $DIR/retag.rs:+3:17: +3:24
|
||||
_4 = &_5; // scope 1 at $DIR/retag.rs:+3:17: +3:36
|
||||
StorageLive(_6); // scope 1 at $DIR/retag.rs:+3:29: +3:35
|
||||
StorageLive(_7); // scope 1 at $DIR/retag.rs:+3:29: +3:35
|
||||
@ -107,7 +106,14 @@ fn main() -> () {
|
||||
StorageDead(_2); // scope 1 at $DIR/retag.rs:+8:5: +8:6
|
||||
StorageLive(_13); // scope 1 at $DIR/retag.rs:+11:9: +11:10
|
||||
StorageLive(_14); // scope 1 at $DIR/retag.rs:+11:31: +14:6
|
||||
Deinit(_14); // scope 1 at $DIR/retag.rs:+11:31: +14:6
|
||||
_14 = [closure@main::{closure#0}]; // scope 1 at $DIR/retag.rs:+11:31: +14:6
|
||||
// closure
|
||||
// + def_id: DefId(0:14 ~ retag[4622]::main::{closure#0})
|
||||
// + substs: [
|
||||
// i8,
|
||||
// for<'a> extern "rust-call" fn((&'a i32,)) -> &'a i32,
|
||||
// (),
|
||||
// ]
|
||||
Retag(_14); // scope 1 at $DIR/retag.rs:+11:31: +14:6
|
||||
_13 = move _14 as for<'a> fn(&'a i32) -> &'a i32 (Pointer(ClosureFnPointer(Normal))); // scope 1 at $DIR/retag.rs:+11:31: +14:6
|
||||
StorageDead(_14); // scope 1 at $DIR/retag.rs:+11:47: +11:48
|
||||
@ -129,8 +135,7 @@ fn main() -> () {
|
||||
StorageLive(_19); // scope 7 at $DIR/retag.rs:+18:5: +18:24
|
||||
StorageLive(_20); // scope 7 at $DIR/retag.rs:+18:5: +18:24
|
||||
StorageLive(_21); // scope 7 at $DIR/retag.rs:+18:5: +18:12
|
||||
Deinit(_21); // scope 7 at $DIR/retag.rs:+18:5: +18:12
|
||||
(_21.0: i32) = const 0_i32; // scope 7 at $DIR/retag.rs:+18:5: +18:12
|
||||
_21 = Test(const 0_i32); // scope 7 at $DIR/retag.rs:+18:5: +18:12
|
||||
_20 = &_21; // scope 7 at $DIR/retag.rs:+18:5: +18:24
|
||||
StorageLive(_22); // scope 7 at $DIR/retag.rs:+18:21: +18:23
|
||||
StorageLive(_23); // scope 7 at $DIR/retag.rs:+18:21: +18:23
|
||||
|
@ -56,36 +56,31 @@
|
||||
StorageLive(_4); // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:9
|
||||
_4 = _1; // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:9
|
||||
_10 = discriminant(_4); // scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
- switchInt(move _10) -> [0: bb7, 1: bb5, otherwise: bb6]; // scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ switchInt(move _10) -> [0: bb6, 1: bb4, otherwise: bb5]; // scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
switchInt(move _10) -> [0: bb7, 1: bb5, otherwise: bb6]; // scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
}
|
||||
|
||||
bb1: {
|
||||
- StorageDead(_4); // scope 0 at $DIR/separate_const_switch.rs:+1:9: +1:10
|
||||
- _5 = discriminant(_3); // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
|
||||
- switchInt(move _5) -> [0: bb2, 1: bb4, otherwise: bb3]; // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
|
||||
- }
|
||||
-
|
||||
- bb2: {
|
||||
StorageDead(_4); // scope 0 at $DIR/separate_const_switch.rs:+1:9: +1:10
|
||||
_5 = discriminant(_3); // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
|
||||
switchInt(move _5) -> [0: bb2, 1: bb4, otherwise: bb3]; // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
|
||||
}
|
||||
|
||||
bb2: {
|
||||
StorageLive(_9); // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
|
||||
_9 = ((_3 as Continue).0: i32); // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
|
||||
_2 = _9; // scope 4 at $DIR/separate_const_switch.rs:+1:8: +1:10
|
||||
StorageDead(_9); // scope 0 at $DIR/separate_const_switch.rs:+1:9: +1:10
|
||||
Deinit(_0); // scope 0 at $DIR/separate_const_switch.rs:+1:5: +1:11
|
||||
((_0 as Ok).0: i32) = move _2; // scope 0 at $DIR/separate_const_switch.rs:+1:5: +1:11
|
||||
discriminant(_0) = 0; // scope 0 at $DIR/separate_const_switch.rs:+1:5: +1:11
|
||||
_0 = Result::<i32, i32>::Ok(move _2); // scope 0 at $DIR/separate_const_switch.rs:+1:5: +1:11
|
||||
StorageDead(_2); // scope 0 at $DIR/separate_const_switch.rs:+1:10: +1:11
|
||||
StorageDead(_3); // scope 0 at $DIR/separate_const_switch.rs:+2:1: +2:2
|
||||
return; // scope 0 at $DIR/separate_const_switch.rs:+2:2: +2:2
|
||||
}
|
||||
|
||||
- bb3: {
|
||||
+ bb2: {
|
||||
bb3: {
|
||||
unreachable; // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
|
||||
}
|
||||
|
||||
- bb4: {
|
||||
+ bb3: {
|
||||
bb4: {
|
||||
StorageLive(_6); // scope 0 at $DIR/separate_const_switch.rs:+1:9: +1:10
|
||||
_6 = ((_3 as Break).0: std::result::Result<std::convert::Infallible, i32>); // scope 0 at $DIR/separate_const_switch.rs:+1:9: +1:10
|
||||
StorageLive(_8); // scope 2 at $DIR/separate_const_switch.rs:+1:9: +1:10
|
||||
@ -97,9 +92,7 @@
|
||||
_18 = move _16; // scope 9 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
_17 = move _18; // scope 10 at $SRC_DIR/core/src/convert/mod.rs:LL:COL
|
||||
StorageDead(_18); // scope 9 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
Deinit(_0); // scope 9 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
((_0 as Err).0: i32) = move _17; // scope 9 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
discriminant(_0) = 1; // scope 9 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
_0 = Result::<i32, i32>::Err(move _17); // scope 9 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
StorageDead(_17); // scope 9 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
StorageDead(_16); // scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
StorageDead(_8); // scope 2 at $DIR/separate_const_switch.rs:+1:9: +1:10
|
||||
@ -109,48 +102,33 @@
|
||||
return; // scope 0 at $DIR/separate_const_switch.rs:+2:2: +2:2
|
||||
}
|
||||
|
||||
- bb5: {
|
||||
+ bb4: {
|
||||
bb5: {
|
||||
StorageLive(_13); // scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
_13 = move ((_4 as Err).0: i32); // scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
StorageLive(_14); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
StorageLive(_15); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
_15 = move _13; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
Deinit(_14); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
((_14 as Err).0: i32) = move _15; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
discriminant(_14) = 1; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
_14 = Result::<Infallible, i32>::Err(move _15); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
StorageDead(_15); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
Deinit(_3); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
((_3 as Break).0: std::result::Result<std::convert::Infallible, i32>) = move _14; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
discriminant(_3) = 1; // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
_3 = ControlFlow::<Result<Infallible, i32>, i32>::Break(move _14); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
StorageDead(_14); // scope 7 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
StorageDead(_13); // scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
- goto -> bb1; // scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ StorageDead(_4); // scope 0 at $DIR/separate_const_switch.rs:+1:9: +1:10
|
||||
+ _5 = discriminant(_3); // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
|
||||
+ switchInt(move _5) -> [0: bb1, 1: bb3, otherwise: bb2]; // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
|
||||
goto -> bb1; // scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
}
|
||||
|
||||
- bb6: {
|
||||
+ bb5: {
|
||||
bb6: {
|
||||
unreachable; // scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
}
|
||||
|
||||
- bb7: {
|
||||
+ bb6: {
|
||||
bb7: {
|
||||
StorageLive(_11); // scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
_11 = move ((_4 as Ok).0: i32); // scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
StorageLive(_12); // scope 6 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
_12 = move _11; // scope 6 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
Deinit(_3); // scope 6 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
((_3 as Continue).0: i32) = move _12; // scope 6 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
discriminant(_3) = 0; // scope 6 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
_3 = ControlFlow::<Result<Infallible, i32>, i32>::Continue(move _12); // scope 6 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
StorageDead(_12); // scope 6 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
StorageDead(_11); // scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
- goto -> bb1; // scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
+ StorageDead(_4); // scope 0 at $DIR/separate_const_switch.rs:+1:9: +1:10
|
||||
+ _5 = discriminant(_3); // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
|
||||
+ switchInt(move _5) -> [0: bb1, 1: bb3, otherwise: bb2]; // scope 0 at $DIR/separate_const_switch.rs:+1:8: +1:10
|
||||
goto -> bb1; // scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -38,14 +38,10 @@
|
||||
_6 = ((_1 as Err).0: usize); // scope 0 at $DIR/separate_const_switch.rs:+8:17: +8:18
|
||||
StorageLive(_7); // scope 2 at $DIR/separate_const_switch.rs:+8:42: +8:43
|
||||
_7 = _6; // scope 2 at $DIR/separate_const_switch.rs:+8:42: +8:43
|
||||
Deinit(_2); // scope 2 at $DIR/separate_const_switch.rs:+8:23: +8:44
|
||||
((_2 as Break).0: usize) = move _7; // scope 2 at $DIR/separate_const_switch.rs:+8:23: +8:44
|
||||
discriminant(_2) = 1; // scope 2 at $DIR/separate_const_switch.rs:+8:23: +8:44
|
||||
_2 = ControlFlow::<usize, i32>::Break(move _7); // scope 2 at $DIR/separate_const_switch.rs:+8:23: +8:44
|
||||
StorageDead(_7); // scope 2 at $DIR/separate_const_switch.rs:+8:43: +8:44
|
||||
StorageDead(_6); // scope 0 at $DIR/separate_const_switch.rs:+8:43: +8:44
|
||||
- goto -> bb4; // scope 0 at $DIR/separate_const_switch.rs:+8:43: +8:44
|
||||
+ _8 = discriminant(_2); // scope 0 at $DIR/separate_const_switch.rs:+5:11: +10:6
|
||||
+ switchInt(move _8) -> [0: bb6, 1: bb4, otherwise: bb5]; // scope 0 at $DIR/separate_const_switch.rs:+5:5: +10:6
|
||||
goto -> bb4; // scope 0 at $DIR/separate_const_switch.rs:+8:43: +8:44
|
||||
}
|
||||
|
||||
bb2: {
|
||||
@ -57,53 +53,41 @@
|
||||
_4 = ((_1 as Ok).0: i32); // scope 0 at $DIR/separate_const_switch.rs:+7:16: +7:17
|
||||
StorageLive(_5); // scope 1 at $DIR/separate_const_switch.rs:+7:44: +7:45
|
||||
_5 = _4; // scope 1 at $DIR/separate_const_switch.rs:+7:44: +7:45
|
||||
Deinit(_2); // scope 1 at $DIR/separate_const_switch.rs:+7:22: +7:46
|
||||
((_2 as Continue).0: i32) = move _5; // scope 1 at $DIR/separate_const_switch.rs:+7:22: +7:46
|
||||
discriminant(_2) = 0; // scope 1 at $DIR/separate_const_switch.rs:+7:22: +7:46
|
||||
_2 = ControlFlow::<usize, i32>::Continue(move _5); // scope 1 at $DIR/separate_const_switch.rs:+7:22: +7:46
|
||||
StorageDead(_5); // scope 1 at $DIR/separate_const_switch.rs:+7:45: +7:46
|
||||
StorageDead(_4); // scope 0 at $DIR/separate_const_switch.rs:+7:45: +7:46
|
||||
- goto -> bb4; // scope 0 at $DIR/separate_const_switch.rs:+7:45: +7:46
|
||||
- }
|
||||
-
|
||||
- bb4: {
|
||||
_8 = discriminant(_2); // scope 0 at $DIR/separate_const_switch.rs:+5:11: +10:6
|
||||
- switchInt(move _8) -> [0: bb7, 1: bb5, otherwise: bb6]; // scope 0 at $DIR/separate_const_switch.rs:+5:5: +10:6
|
||||
+ switchInt(move _8) -> [0: bb6, 1: bb4, otherwise: bb5]; // scope 0 at $DIR/separate_const_switch.rs:+5:5: +10:6
|
||||
goto -> bb4; // scope 0 at $DIR/separate_const_switch.rs:+7:45: +7:46
|
||||
}
|
||||
|
||||
- bb5: {
|
||||
+ bb4: {
|
||||
bb4: {
|
||||
_8 = discriminant(_2); // scope 0 at $DIR/separate_const_switch.rs:+5:11: +10:6
|
||||
switchInt(move _8) -> [0: bb7, 1: bb5, otherwise: bb6]; // scope 0 at $DIR/separate_const_switch.rs:+5:5: +10:6
|
||||
}
|
||||
|
||||
bb5: {
|
||||
StorageLive(_11); // scope 0 at $DIR/separate_const_switch.rs:+12:28: +12:29
|
||||
_11 = ((_2 as Break).0: usize); // scope 0 at $DIR/separate_const_switch.rs:+12:28: +12:29
|
||||
Deinit(_0); // scope 4 at $DIR/separate_const_switch.rs:+12:34: +12:38
|
||||
discriminant(_0) = 0; // scope 4 at $DIR/separate_const_switch.rs:+12:34: +12:38
|
||||
_0 = Option::<i32>::None; // scope 4 at $DIR/separate_const_switch.rs:+12:34: +12:38
|
||||
StorageDead(_11); // scope 0 at $DIR/separate_const_switch.rs:+12:37: +12:38
|
||||
- goto -> bb8; // scope 0 at $DIR/separate_const_switch.rs:+12:37: +12:38
|
||||
+ goto -> bb7; // scope 0 at $DIR/separate_const_switch.rs:+12:37: +12:38
|
||||
goto -> bb8; // scope 0 at $DIR/separate_const_switch.rs:+12:37: +12:38
|
||||
}
|
||||
|
||||
- bb6: {
|
||||
+ bb5: {
|
||||
bb6: {
|
||||
unreachable; // scope 0 at $DIR/separate_const_switch.rs:+5:11: +10:6
|
||||
}
|
||||
|
||||
- bb7: {
|
||||
+ bb6: {
|
||||
bb7: {
|
||||
StorageLive(_9); // scope 0 at $DIR/separate_const_switch.rs:+11:31: +11:32
|
||||
_9 = ((_2 as Continue).0: i32); // scope 0 at $DIR/separate_const_switch.rs:+11:31: +11:32
|
||||
StorageLive(_10); // scope 3 at $DIR/separate_const_switch.rs:+11:42: +11:43
|
||||
_10 = _9; // scope 3 at $DIR/separate_const_switch.rs:+11:42: +11:43
|
||||
Deinit(_0); // scope 3 at $DIR/separate_const_switch.rs:+11:37: +11:44
|
||||
((_0 as Some).0: i32) = move _10; // scope 3 at $DIR/separate_const_switch.rs:+11:37: +11:44
|
||||
discriminant(_0) = 1; // scope 3 at $DIR/separate_const_switch.rs:+11:37: +11:44
|
||||
_0 = Option::<i32>::Some(move _10); // scope 3 at $DIR/separate_const_switch.rs:+11:37: +11:44
|
||||
StorageDead(_10); // scope 3 at $DIR/separate_const_switch.rs:+11:43: +11:44
|
||||
StorageDead(_9); // scope 0 at $DIR/separate_const_switch.rs:+11:43: +11:44
|
||||
- goto -> bb8; // scope 0 at $DIR/separate_const_switch.rs:+11:43: +11:44
|
||||
+ goto -> bb7; // scope 0 at $DIR/separate_const_switch.rs:+11:43: +11:44
|
||||
goto -> bb8; // scope 0 at $DIR/separate_const_switch.rs:+11:43: +11:44
|
||||
}
|
||||
|
||||
- bb8: {
|
||||
+ bb7: {
|
||||
bb8: {
|
||||
StorageDead(_2); // scope 0 at $DIR/separate_const_switch.rs:+14:1: +14:2
|
||||
return; // scope 0 at $DIR/separate_const_switch.rs:+14:2: +14:2
|
||||
}
|
||||
|
@ -4,29 +4,31 @@ fn ezmap(_1: Option<i32>) -> Option<i32> {
|
||||
debug x => _1; // in scope 0 at $DIR/simple_option_map_e2e.rs:+0:14: +0:15
|
||||
let mut _0: std::option::Option<i32>; // return place in scope 0 at $DIR/simple_option_map_e2e.rs:+0:33: +0:44
|
||||
let mut _2: [closure@$DIR/simple_option_map_e2e.rs:14:12: 14:15]; // in scope 0 at $DIR/simple_option_map_e2e.rs:+1:12: +1:21
|
||||
let mut _7: i32; // in scope 0 at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
||||
scope 1 (inlined map::<i32, i32, [closure@$DIR/simple_option_map_e2e.rs:14:12: 14:15]>) { // at $DIR/simple_option_map_e2e.rs:14:5: 14:22
|
||||
debug slf => _1; // in scope 1 at $DIR/simple_option_map_e2e.rs:2:17: 2:20
|
||||
debug f => _2; // in scope 1 at $DIR/simple_option_map_e2e.rs:2:33: 2:34
|
||||
let mut _3: isize; // in scope 1 at $DIR/simple_option_map_e2e.rs:7:9: 7:16
|
||||
let mut _4: i32; // in scope 1 at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
||||
let _4: i32; // in scope 1 at $DIR/simple_option_map_e2e.rs:7:14: 7:15
|
||||
let mut _5: i32; // in scope 1 at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
||||
let mut _6: (i32,); // in scope 1 at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
||||
scope 2 {
|
||||
debug x => _5; // in scope 2 at $DIR/simple_option_map_e2e.rs:7:14: 7:15
|
||||
debug x => _4; // in scope 2 at $DIR/simple_option_map_e2e.rs:7:14: 7:15
|
||||
scope 3 (inlined ezmap::{closure#0}) { // at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
||||
debug n => _5; // in scope 3 at $DIR/simple_option_map_e2e.rs:+1:13: +1:14
|
||||
debug n => _7; // in scope 3 at $DIR/simple_option_map_e2e.rs:+1:13: +1:14
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_2); // scope 0 at $DIR/simple_option_map_e2e.rs:+1:12: +1:21
|
||||
StorageLive(_4); // scope 0 at $DIR/simple_option_map_e2e.rs:+1:5: +1:22
|
||||
_3 = discriminant(_1); // scope 1 at $DIR/simple_option_map_e2e.rs:6:11: 6:14
|
||||
switchInt(move _3) -> [0: bb1, 1: bb3, otherwise: bb2]; // scope 1 at $DIR/simple_option_map_e2e.rs:6:5: 6:14
|
||||
}
|
||||
|
||||
bb1: {
|
||||
Deinit(_0); // scope 1 at $DIR/simple_option_map_e2e.rs:8:17: 8:21
|
||||
discriminant(_0) = 0; // scope 1 at $DIR/simple_option_map_e2e.rs:8:17: 8:21
|
||||
_0 = Option::<i32>::None; // scope 1 at $DIR/simple_option_map_e2e.rs:8:17: 8:21
|
||||
goto -> bb4; // scope 1 at $DIR/simple_option_map_e2e.rs:8:17: 8:21
|
||||
}
|
||||
|
||||
@ -35,17 +37,22 @@ fn ezmap(_1: Option<i32>) -> Option<i32> {
|
||||
}
|
||||
|
||||
bb3: {
|
||||
_5 = move ((_1 as Some).0: i32); // scope 1 at $DIR/simple_option_map_e2e.rs:7:14: 7:15
|
||||
StorageLive(_4); // scope 2 at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
||||
_4 = Add(_5, const 1_i32); // scope 3 at $DIR/simple_option_map_e2e.rs:+1:16: +1:21
|
||||
Deinit(_0); // scope 2 at $DIR/simple_option_map_e2e.rs:7:20: 7:30
|
||||
((_0 as Some).0: i32) = move _4; // scope 2 at $DIR/simple_option_map_e2e.rs:7:20: 7:30
|
||||
discriminant(_0) = 1; // scope 2 at $DIR/simple_option_map_e2e.rs:7:20: 7:30
|
||||
StorageDead(_4); // scope 2 at $DIR/simple_option_map_e2e.rs:7:29: 7:30
|
||||
_4 = move ((_1 as Some).0: i32); // scope 1 at $DIR/simple_option_map_e2e.rs:7:14: 7:15
|
||||
StorageLive(_5); // scope 2 at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
||||
StorageLive(_6); // scope 2 at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
||||
_6 = (move _4,); // scope 2 at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
||||
StorageLive(_7); // scope 2 at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
||||
_7 = move (_6.0: i32); // scope 2 at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
||||
_5 = Add(_7, const 1_i32); // scope 3 at $DIR/simple_option_map_e2e.rs:+1:16: +1:21
|
||||
StorageDead(_7); // scope 2 at $DIR/simple_option_map_e2e.rs:7:25: 7:29
|
||||
StorageDead(_6); // scope 2 at $DIR/simple_option_map_e2e.rs:7:28: 7:29
|
||||
_0 = Option::<i32>::Some(move _5); // scope 2 at $DIR/simple_option_map_e2e.rs:7:20: 7:30
|
||||
StorageDead(_5); // scope 2 at $DIR/simple_option_map_e2e.rs:7:29: 7:30
|
||||
goto -> bb4; // scope 1 at $DIR/simple_option_map_e2e.rs:10:1: 10:2
|
||||
}
|
||||
|
||||
bb4: {
|
||||
StorageDead(_4); // scope 0 at $DIR/simple_option_map_e2e.rs:+1:5: +1:22
|
||||
StorageDead(_2); // scope 0 at $DIR/simple_option_map_e2e.rs:+1:21: +1:22
|
||||
return; // scope 0 at $DIR/simple_option_map_e2e.rs:+2:2: +2:2
|
||||
}
|
||||
|
@ -9,8 +9,7 @@
|
||||
|
||||
bb0: {
|
||||
- StorageLive(_1); // scope 0 at $DIR/simplify_locals.rs:+2:13: +2:17
|
||||
- Deinit(_1); // scope 0 at $DIR/simplify_locals.rs:+2:13: +2:17
|
||||
- discriminant(_1) = 0; // scope 0 at $DIR/simplify_locals.rs:+2:13: +2:17
|
||||
- _1 = E::A; // scope 0 at $DIR/simplify_locals.rs:+2:13: +2:17
|
||||
- StorageDead(_1); // scope 0 at $DIR/simplify_locals.rs:+2:17: +2:18
|
||||
_0 = const (); // scope 0 at $DIR/simplify_locals.rs:+0:9: +3:2
|
||||
return; // scope 0 at $DIR/simplify_locals.rs:+3:2: +3:2
|
||||
|
@ -9,15 +9,11 @@
|
||||
|
||||
bb0: {
|
||||
- StorageLive(_1); // scope 0 at $DIR/simplify_locals.rs:+2:22: +2:26
|
||||
- Deinit(_1); // scope 0 at $DIR/simplify_locals.rs:+2:22: +2:26
|
||||
- discriminant(_1) = 1; // scope 0 at $DIR/simplify_locals.rs:+2:22: +2:26
|
||||
- _1 = E::B; // scope 0 at $DIR/simplify_locals.rs:+2:22: +2:26
|
||||
- StorageLive(_2); // scope 0 at $DIR/simplify_locals.rs:+2:5: +2:17
|
||||
- StorageLive(_3); // scope 0 at $DIR/simplify_locals.rs:+2:11: +2:15
|
||||
- Deinit(_3); // scope 0 at $DIR/simplify_locals.rs:+2:11: +2:15
|
||||
- discriminant(_3) = 0; // scope 0 at $DIR/simplify_locals.rs:+2:11: +2:15
|
||||
- Deinit(_2); // scope 0 at $DIR/simplify_locals.rs:+2:6: +2:16
|
||||
- (_2.0: i32) = const 10_i32; // scope 0 at $DIR/simplify_locals.rs:+2:6: +2:16
|
||||
- (_2.1: E) = move _3; // scope 0 at $DIR/simplify_locals.rs:+2:6: +2:16
|
||||
- _3 = E::A; // scope 0 at $DIR/simplify_locals.rs:+2:11: +2:15
|
||||
- _2 = (const 10_i32, move _3); // scope 0 at $DIR/simplify_locals.rs:+2:6: +2:16
|
||||
- StorageDead(_3); // scope 0 at $DIR/simplify_locals.rs:+2:15: +2:16
|
||||
- (_2.1: E) = move _1; // scope 0 at $DIR/simplify_locals.rs:+2:5: +2:26
|
||||
- StorageDead(_1); // scope 0 at $DIR/simplify_locals.rs:+2:25: +2:26
|
||||
|
@ -18,14 +18,10 @@
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:30: +1:69
|
||||
StorageLive(_2); // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:31: +1:49
|
||||
Deinit(_2); // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:31: +1:49
|
||||
discriminant(_2) = 0; // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:31: +1:49
|
||||
_2 = Option::<u8>::None; // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:31: +1:49
|
||||
StorageLive(_3); // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:51: +1:68
|
||||
Deinit(_3); // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:51: +1:68
|
||||
discriminant(_3) = 0; // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:51: +1:68
|
||||
Deinit(_1); // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:30: +1:69
|
||||
(_1.0: std::option::Option<u8>) = move _2; // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:30: +1:69
|
||||
(_1.1: std::option::Option<T>) = move _3; // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:30: +1:69
|
||||
_3 = Option::<T>::None; // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:51: +1:68
|
||||
_1 = (move _2, move _3); // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:30: +1:69
|
||||
StorageDead(_3); // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:68: +1:69
|
||||
StorageDead(_2); // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:68: +1:69
|
||||
_5 = discriminant((_1.0: std::option::Option<u8>)); // scope 1 at $DIR/simplify_locals_fixedpoint.rs:+1:12: +1:27
|
||||
|
@ -28,36 +28,30 @@
|
||||
bb0: {
|
||||
- StorageLive(_1); // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:20: +1:28
|
||||
- StorageLive(_2); // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:21: +1:23
|
||||
- Deinit(_2); // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:21: +1:23
|
||||
- _2 = (); // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:21: +1:23
|
||||
- StorageLive(_3); // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:25: +1:27
|
||||
- Deinit(_3); // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:25: +1:27
|
||||
- Deinit(_1); // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:20: +1:28
|
||||
- (_1.0: ()) = move _2; // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:20: +1:28
|
||||
- (_1.1: ()) = move _3; // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:20: +1:28
|
||||
- _3 = (); // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:25: +1:27
|
||||
- _1 = (move _2, move _3); // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:20: +1:28
|
||||
- StorageDead(_3); // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:27: +1:28
|
||||
- StorageDead(_2); // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:27: +1:28
|
||||
- StorageDead(_1); // scope 0 at $DIR/simplify_locals_removes_unused_consts.rs:+1:28: +1:29
|
||||
- StorageLive(_4); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:5: +2:22
|
||||
- StorageLive(_5); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:13: +2:21
|
||||
- StorageLive(_6); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:14: +2:16
|
||||
- Deinit(_6); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:14: +2:16
|
||||
- _6 = (); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:14: +2:16
|
||||
- StorageLive(_7); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:18: +2:20
|
||||
- Deinit(_7); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:18: +2:20
|
||||
- Deinit(_5); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:13: +2:21
|
||||
- (_5.0: ()) = move _6; // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:13: +2:21
|
||||
- (_5.1: ()) = move _7; // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:13: +2:21
|
||||
- _7 = (); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:18: +2:20
|
||||
- _5 = (move _6, move _7); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:13: +2:21
|
||||
- StorageDead(_7); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:20: +2:21
|
||||
- StorageDead(_6); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:20: +2:21
|
||||
- _4 = use_zst(move _5) -> bb1; // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:5: +2:22
|
||||
+ StorageLive(_1); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:5: +2:22
|
||||
+ StorageLive(_2); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:13: +2:21
|
||||
+ StorageLive(_3); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:14: +2:16
|
||||
+ Deinit(_3); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:14: +2:16
|
||||
+ _3 = (); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:14: +2:16
|
||||
+ StorageLive(_4); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:18: +2:20
|
||||
+ Deinit(_4); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:18: +2:20
|
||||
+ Deinit(_2); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:13: +2:21
|
||||
+ (_2.0: ()) = move _3; // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:13: +2:21
|
||||
+ (_2.1: ()) = move _4; // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:13: +2:21
|
||||
+ _4 = (); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:18: +2:20
|
||||
+ _2 = (move _3, move _4); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:13: +2:21
|
||||
+ StorageDead(_4); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:20: +2:21
|
||||
+ StorageDead(_3); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:20: +2:21
|
||||
+ _1 = use_zst(move _2) -> bb1; // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+2:5: +2:22
|
||||
@ -73,8 +67,7 @@
|
||||
- StorageLive(_9); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:34
|
||||
- StorageLive(_10); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:30
|
||||
- StorageLive(_11); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:28
|
||||
- Deinit(_11); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:28
|
||||
- (_11.0: u8) = const 40_u8; // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:28
|
||||
- _11 = Temp { x: const 40_u8 }; // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:28
|
||||
- _10 = (_11.0: u8); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:30
|
||||
- _9 = Add(move _10, const 2_u8); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:34
|
||||
- StorageDead(_10); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:33: +4:34
|
||||
@ -85,8 +78,7 @@
|
||||
+ StorageLive(_6); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:34
|
||||
+ StorageLive(_7); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:30
|
||||
+ StorageLive(_8); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:28
|
||||
+ Deinit(_8); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:28
|
||||
+ (_8.0: u8) = const 40_u8; // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:28
|
||||
+ _8 = Temp { x: const 40_u8 }; // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:28
|
||||
+ _7 = (_8.0: u8); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:30
|
||||
+ _6 = Add(move _7, const 2_u8); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:12: +4:34
|
||||
+ StorageDead(_7); // scope 1 at $DIR/simplify_locals_removes_unused_consts.rs:+4:33: +4:34
|
||||
|
@ -26,9 +26,7 @@
|
||||
_3 = move ((_1 as Some).0: std::boxed::Box<()>); // scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+3:14: +3:15
|
||||
StorageLive(_4); // scope 1 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+3:25: +3:26
|
||||
_4 = move _3; // scope 1 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+3:25: +3:26
|
||||
Deinit(_0); // scope 1 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+3:20: +3:27
|
||||
((_0 as Some).0: std::boxed::Box<()>) = move _4; // scope 1 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+3:20: +3:27
|
||||
discriminant(_0) = 1; // scope 1 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+3:20: +3:27
|
||||
_0 = Option::<Box<()>>::Some(move _4); // scope 1 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+3:20: +3:27
|
||||
StorageDead(_4); // scope 1 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+3:26: +3:27
|
||||
StorageDead(_3); // scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+3:26: +3:27
|
||||
goto -> bb4; // scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+3:26: +3:27
|
||||
@ -39,8 +37,7 @@
|
||||
}
|
||||
|
||||
bb3: {
|
||||
Deinit(_0); // scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+2:17: +2:21
|
||||
discriminant(_0) = 0; // scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+2:17: +2:21
|
||||
_0 = Option::<Box<()>>::None; // scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+2:17: +2:21
|
||||
goto -> bb4; // scope 0 at $DIR/simplify_locals_removes_unused_discriminant_reads.rs:+2:17: +2:21
|
||||
}
|
||||
|
||||
|
@ -13,18 +13,12 @@
|
||||
StorageLive(_1); // scope 0 at $DIR/sroa.rs:+1:5: +1:32
|
||||
StorageLive(_2); // scope 0 at $DIR/sroa.rs:+1:5: +1:30
|
||||
StorageLive(_3); // scope 0 at $DIR/sroa.rs:+1:7: +1:13
|
||||
Deinit(_3); // scope 0 at $DIR/sroa.rs:+1:7: +1:13
|
||||
(_3.0: usize) = const 0_usize; // scope 0 at $DIR/sroa.rs:+1:7: +1:13
|
||||
_3 = Tag(const 0_usize); // scope 0 at $DIR/sroa.rs:+1:7: +1:13
|
||||
StorageLive(_4); // scope 0 at $DIR/sroa.rs:+1:15: +1:21
|
||||
Deinit(_4); // scope 0 at $DIR/sroa.rs:+1:15: +1:21
|
||||
(_4.0: usize) = const 1_usize; // scope 0 at $DIR/sroa.rs:+1:15: +1:21
|
||||
_4 = Tag(const 1_usize); // scope 0 at $DIR/sroa.rs:+1:15: +1:21
|
||||
StorageLive(_5); // scope 0 at $DIR/sroa.rs:+1:23: +1:29
|
||||
Deinit(_5); // scope 0 at $DIR/sroa.rs:+1:23: +1:29
|
||||
(_5.0: usize) = const 2_usize; // scope 0 at $DIR/sroa.rs:+1:23: +1:29
|
||||
Deinit(_2); // scope 0 at $DIR/sroa.rs:+1:5: +1:30
|
||||
(_2.0: Tag) = move _3; // scope 0 at $DIR/sroa.rs:+1:5: +1:30
|
||||
(_2.1: Tag) = move _4; // scope 0 at $DIR/sroa.rs:+1:5: +1:30
|
||||
(_2.2: Tag) = move _5; // scope 0 at $DIR/sroa.rs:+1:5: +1:30
|
||||
_5 = Tag(const 2_usize); // scope 0 at $DIR/sroa.rs:+1:23: +1:29
|
||||
_2 = S(move _3, move _4, move _5); // scope 0 at $DIR/sroa.rs:+1:5: +1:30
|
||||
StorageDead(_5); // scope 0 at $DIR/sroa.rs:+1:29: +1:30
|
||||
StorageDead(_4); // scope 0 at $DIR/sroa.rs:+1:29: +1:30
|
||||
StorageDead(_3); // scope 0 at $DIR/sroa.rs:+1:29: +1:30
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user