1
Fork 0

Auto merge of #77466 - Aaron1011:reland-drop-tree, r=matthewjasper

Re-land PR #71840 (Rework MIR drop tree lowering)

PR https://github.com/rust-lang/rust/pull/71840 was reverted in https://github.com/rust-lang/rust/pull/72989 to fix an LLVM error (https://github.com/rust-lang/rust/issues/72470). That LLVM error no longer occurs with the recent upgrade to LLVM 11 (https://github.com/rust-lang/rust/pull/73526), so let's try re-landing this PR.

I've cherry-picked the commits from the original PR (with the exception of the commit blessing test output), making as few modifications as possible. I addressed the rebase fallout in separate commits on top of those.

r? `@matthewjasper`
This commit is contained in:
bors 2020-10-05 00:35:58 +00:00
commit ced813fec0
81 changed files with 2584 additions and 2828 deletions

View file

@ -362,17 +362,18 @@ impl<'b, 'a, 'tcx> Gatherer<'b, 'a, 'tcx> {
fn gather_terminator(&mut self, term: &Terminator<'tcx>) { fn gather_terminator(&mut self, term: &Terminator<'tcx>) {
match term.kind { match term.kind {
TerminatorKind::Goto { target: _ } TerminatorKind::Goto { target: _ }
| TerminatorKind::FalseEdge { .. }
| TerminatorKind::FalseUnwind { .. }
// In some sense returning moves the return place into the current
// call's destination, however, since there are no statements after
// this that could possibly access the return place, this doesn't
// need recording.
| TerminatorKind::Return
| TerminatorKind::Resume | TerminatorKind::Resume
| TerminatorKind::Abort | TerminatorKind::Abort
| TerminatorKind::GeneratorDrop | TerminatorKind::GeneratorDrop
| TerminatorKind::FalseEdge { .. }
| TerminatorKind::FalseUnwind { .. }
| TerminatorKind::Unreachable => {} | TerminatorKind::Unreachable => {}
TerminatorKind::Return => {
self.gather_move(Place::return_place());
}
TerminatorKind::Assert { ref cond, .. } => { TerminatorKind::Assert { ref cond, .. } => {
self.gather_operand(cond); self.gather_operand(cond);
} }

View file

@ -231,8 +231,6 @@ where
.patch_terminator(bb, TerminatorKind::Goto { target: self.succ }); .patch_terminator(bb, TerminatorKind::Goto { target: self.succ });
} }
DropStyle::Static => { DropStyle::Static => {
let loc = self.terminator_loc(bb);
self.elaborator.clear_drop_flag(loc, self.path, DropFlagMode::Deep);
self.elaborator.patch().patch_terminator( self.elaborator.patch().patch_terminator(
bb, bb,
TerminatorKind::Drop { TerminatorKind::Drop {
@ -243,9 +241,7 @@ where
); );
} }
DropStyle::Conditional => { DropStyle::Conditional => {
let unwind = self.unwind; // FIXME(#43234) let drop_bb = self.complete_drop(self.succ, self.unwind);
let succ = self.succ;
let drop_bb = self.complete_drop(Some(DropFlagMode::Deep), succ, unwind);
self.elaborator self.elaborator
.patch() .patch()
.patch_terminator(bb, TerminatorKind::Goto { target: drop_bb }); .patch_terminator(bb, TerminatorKind::Goto { target: drop_bb });
@ -317,7 +313,7 @@ where
// our own drop flag. // our own drop flag.
path: self.path, path: self.path,
} }
.complete_drop(None, succ, unwind) .complete_drop(succ, unwind)
} }
} }
@ -346,13 +342,7 @@ where
// Clear the "master" drop flag at the end. This is needed // Clear the "master" drop flag at the end. This is needed
// because the "master" drop protects the ADT's discriminant, // because the "master" drop protects the ADT's discriminant,
// which is invalidated after the ADT is dropped. // which is invalidated after the ADT is dropped.
let (succ, unwind) = (self.succ, self.unwind); // FIXME(#43234) (self.drop_flag_reset_block(DropFlagMode::Shallow, self.succ, self.unwind), self.unwind)
(
self.drop_flag_reset_block(DropFlagMode::Shallow, succ, unwind),
unwind.map(|unwind| {
self.drop_flag_reset_block(DropFlagMode::Shallow, unwind, Unwind::InCleanup)
}),
)
} }
/// Creates a full drop ladder, consisting of 2 connected half-drop-ladders /// Creates a full drop ladder, consisting of 2 connected half-drop-ladders
@ -884,11 +874,7 @@ where
self.open_drop_for_adt(def, substs) self.open_drop_for_adt(def, substs)
} }
} }
ty::Dynamic(..) => { ty::Dynamic(..) => self.complete_drop(self.succ, self.unwind),
let unwind = self.unwind; // FIXME(#43234)
let succ = self.succ;
self.complete_drop(Some(DropFlagMode::Deep), succ, unwind)
}
ty::Array(ety, size) => { ty::Array(ety, size) => {
let size = size.try_eval_usize(self.tcx(), self.elaborator.param_env()); let size = size.try_eval_usize(self.tcx(), self.elaborator.param_env());
self.open_drop_for_array(ety, size) self.open_drop_for_array(ety, size)
@ -899,20 +885,10 @@ where
} }
} }
fn complete_drop( fn complete_drop(&mut self, succ: BasicBlock, unwind: Unwind) -> BasicBlock {
&mut self, debug!("complete_drop(succ={:?}, unwind={:?})", succ, unwind);
drop_mode: Option<DropFlagMode>,
succ: BasicBlock,
unwind: Unwind,
) -> BasicBlock {
debug!("complete_drop({:?},{:?})", self, drop_mode);
let drop_block = self.drop_block(succ, unwind); let drop_block = self.drop_block(succ, unwind);
let drop_block = if let Some(mode) = drop_mode {
self.drop_flag_reset_block(mode, drop_block, unwind)
} else {
drop_block
};
self.drop_flag_test_block(drop_block, succ, unwind) self.drop_flag_test_block(drop_block, succ, unwind)
} }
@ -927,6 +903,11 @@ where
) -> BasicBlock { ) -> BasicBlock {
debug!("drop_flag_reset_block({:?},{:?})", self, mode); debug!("drop_flag_reset_block({:?},{:?})", self, mode);
if unwind.is_cleanup() {
// The drop flag isn't read again on the unwind path, so don't
// bother setting it.
return succ;
}
let block = self.new_block(unwind, TerminatorKind::Goto { target: succ }); let block = self.new_block(unwind, TerminatorKind::Goto { target: succ });
let block_start = Location { block, statement_index: 0 }; let block_start = Location { block, statement_index: 0 };
self.elaborator.clear_drop_flag(block_start, self.path, mode); self.elaborator.clear_drop_flag(block_start, self.path, mode);
@ -1044,11 +1025,6 @@ where
self.elaborator.patch().new_temp(ty, self.source_info.span) self.elaborator.patch().new_temp(ty, self.source_info.span)
} }
fn terminator_loc(&mut self, bb: BasicBlock) -> Location {
let body = self.elaborator.body();
self.elaborator.patch().terminator_loc(body, bb)
}
fn constant_usize(&self, val: u16) -> Operand<'tcx> { fn constant_usize(&self, val: u16) -> Operand<'tcx> {
Operand::Constant(box Constant { Operand::Constant(box Constant {
span: self.source_info.span, span: self.source_info.span,

View file

@ -111,13 +111,19 @@ where
write!(w, r#"<table border="0" cellborder="1" cellspacing="0">"#)?; write!(w, r#"<table border="0" cellborder="1" cellspacing="0">"#)?;
// Basic block number at the top. // Basic block number at the top.
let (blk, bgcolor) = if data.is_cleanup {
(format!("{} (cleanup)", block.index()), "lightblue")
} else {
let color = if dark_mode { "dimgray" } else { "gray" };
(format!("{}", block.index()), color)
};
write!( write!(
w, w,
r#"<tr><td bgcolor="{bgcolor}" {attrs} colspan="{colspan}">{blk}</td></tr>"#, r#"<tr><td bgcolor="{bgcolor}" {attrs} colspan="{colspan}">{blk}</td></tr>"#,
bgcolor = if dark_mode { "dimgray" } else { "gray" },
attrs = r#"align="center""#, attrs = r#"align="center""#,
colspan = num_cols, colspan = num_cols,
blk = block.index() blk = blk,
bgcolor = bgcolor
)?; )?;
init(w)?; init(w)?;

View file

@ -28,14 +28,16 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
self.in_opt_scope(opt_destruction_scope.map(|de| (de, source_info)), move |this| { self.in_opt_scope(opt_destruction_scope.map(|de| (de, source_info)), move |this| {
this.in_scope((region_scope, source_info), LintLevel::Inherited, move |this| { this.in_scope((region_scope, source_info), LintLevel::Inherited, move |this| {
if targeted_by_break { if targeted_by_break {
// This is a `break`-able block this.in_breakable_scope(None, destination, span, |this| {
let exit_block = this.cfg.start_new_block(); Some(this.ast_block_stmts(
let block_exit = destination,
this.in_breakable_scope(None, exit_block, destination, |this| { block,
this.ast_block_stmts(destination, block, span, stmts, expr, safety_mode) span,
}); stmts,
this.cfg.goto(unpack!(block_exit), source_info, exit_block); expr,
exit_block.unit() safety_mode,
))
})
} else { } else {
this.ast_block_stmts(destination, block, span, stmts, expr, safety_mode) this.ast_block_stmts(destination, block, span, stmts, expr, safety_mode)
} }

View file

@ -140,23 +140,19 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
// body, even when the exact code in the body cannot unwind // body, even when the exact code in the body cannot unwind
let loop_block = this.cfg.start_new_block(); let loop_block = this.cfg.start_new_block();
let exit_block = this.cfg.start_new_block();
// Start the loop. // Start the loop.
this.cfg.goto(block, source_info, loop_block); this.cfg.goto(block, source_info, loop_block);
this.in_breakable_scope(Some(loop_block), exit_block, destination, move |this| { this.in_breakable_scope(Some(loop_block), destination, expr_span, move |this| {
// conduct the test, if necessary // conduct the test, if necessary
let body_block = this.cfg.start_new_block(); let body_block = this.cfg.start_new_block();
let diverge_cleanup = this.diverge_cleanup();
this.cfg.terminate( this.cfg.terminate(
loop_block, loop_block,
source_info, source_info,
TerminatorKind::FalseUnwind { TerminatorKind::FalseUnwind { real_target: body_block, unwind: None },
real_target: body_block,
unwind: Some(diverge_cleanup),
},
); );
this.diverge_from(loop_block);
// The “return” value of the loop body must always be an unit. We therefore // The “return” value of the loop body must always be an unit. We therefore
// introduce a unit temporary as the destination for the loop body. // introduce a unit temporary as the destination for the loop body.
@ -164,8 +160,10 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
// Execute the body, branching back to the test. // Execute the body, branching back to the test.
let body_block_end = unpack!(this.into(tmp, body_block, body)); let body_block_end = unpack!(this.into(tmp, body_block, body));
this.cfg.goto(body_block_end, source_info, loop_block); this.cfg.goto(body_block_end, source_info, loop_block);
});
exit_block.unit() // Loops are only exited by `break` expressions.
None
})
} }
ExprKind::Call { ty, fun, args, from_hir_call, fn_span } => { ExprKind::Call { ty, fun, args, from_hir_call, fn_span } => {
let intrinsic = match *ty.kind() { let intrinsic = match *ty.kind() {
@ -206,7 +204,6 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
.collect(); .collect();
let success = this.cfg.start_new_block(); let success = this.cfg.start_new_block();
let cleanup = this.diverge_cleanup();
this.record_operands_moved(&args); this.record_operands_moved(&args);
@ -218,7 +215,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
TerminatorKind::Call { TerminatorKind::Call {
func: fun, func: fun,
args, args,
cleanup: Some(cleanup), cleanup: None,
// FIXME(varkor): replace this with an uninhabitedness-based check. // FIXME(varkor): replace this with an uninhabitedness-based check.
// This requires getting access to the current module to call // This requires getting access to the current module to call
// `tcx.is_ty_uninhabited_from`, which is currently tricky to do. // `tcx.is_ty_uninhabited_from`, which is currently tricky to do.
@ -231,6 +228,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
fn_span, fn_span,
}, },
); );
this.diverge_from(block);
success.unit() success.unit()
} }
} }
@ -437,12 +435,12 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
let scope = this.local_scope(); let scope = this.local_scope();
let value = unpack!(block = this.as_operand(block, scope, value)); let value = unpack!(block = this.as_operand(block, scope, value));
let resume = this.cfg.start_new_block(); let resume = this.cfg.start_new_block();
let cleanup = this.generator_drop_cleanup();
this.cfg.terminate( this.cfg.terminate(
block, block,
source_info, source_info,
TerminatorKind::Yield { value, resume, resume_arg: destination, drop: cleanup }, TerminatorKind::Yield { value, resume, resume_arg: destination, drop: None },
); );
this.generator_drop_cleanup(block);
resume.unit() resume.unit()
} }

View file

@ -228,8 +228,6 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
outer_source_info: SourceInfo, outer_source_info: SourceInfo,
fake_borrow_temps: Vec<(Place<'tcx>, Local)>, fake_borrow_temps: Vec<(Place<'tcx>, Local)>,
) -> BlockAnd<()> { ) -> BlockAnd<()> {
let match_scope = self.scopes.topmost();
let arm_end_blocks: Vec<_> = arm_candidates let arm_end_blocks: Vec<_> = arm_candidates
.into_iter() .into_iter()
.map(|(arm, candidate)| { .map(|(arm, candidate)| {
@ -250,7 +248,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
let arm_block = this.bind_pattern( let arm_block = this.bind_pattern(
outer_source_info, outer_source_info,
candidate, candidate,
arm.guard.as_ref().map(|g| (g, match_scope)), arm.guard.as_ref(),
&fake_borrow_temps, &fake_borrow_temps,
scrutinee_span, scrutinee_span,
Some(arm.scope), Some(arm.scope),
@ -287,7 +285,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
&mut self, &mut self,
outer_source_info: SourceInfo, outer_source_info: SourceInfo,
candidate: Candidate<'_, 'tcx>, candidate: Candidate<'_, 'tcx>,
guard: Option<(&Guard<'tcx>, region::Scope)>, guard: Option<&Guard<'tcx>>,
fake_borrow_temps: &Vec<(Place<'tcx>, Local)>, fake_borrow_temps: &Vec<(Place<'tcx>, Local)>,
scrutinee_span: Span, scrutinee_span: Span,
arm_scope: Option<region::Scope>, arm_scope: Option<region::Scope>,
@ -1592,7 +1590,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
&mut self, &mut self,
candidate: Candidate<'pat, 'tcx>, candidate: Candidate<'pat, 'tcx>,
parent_bindings: &[(Vec<Binding<'tcx>>, Vec<Ascription<'tcx>>)], parent_bindings: &[(Vec<Binding<'tcx>>, Vec<Ascription<'tcx>>)],
guard: Option<(&Guard<'tcx>, region::Scope)>, guard: Option<&Guard<'tcx>>,
fake_borrows: &Vec<(Place<'tcx>, Local)>, fake_borrows: &Vec<(Place<'tcx>, Local)>,
scrutinee_span: Span, scrutinee_span: Span,
schedule_drops: bool, schedule_drops: bool,
@ -1704,7 +1702,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
// the reference that we create for the arm. // the reference that we create for the arm.
// * So we eagerly create the reference for the arm and then take a // * So we eagerly create the reference for the arm and then take a
// reference to that. // reference to that.
if let Some((guard, region_scope)) = guard { if let Some(guard) = guard {
let tcx = self.hir.tcx(); let tcx = self.hir.tcx();
let bindings = parent_bindings let bindings = parent_bindings
.iter() .iter()
@ -1748,12 +1746,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
unreachable unreachable
}); });
let outside_scope = self.cfg.start_new_block(); let outside_scope = self.cfg.start_new_block();
self.exit_scope( self.exit_top_scope(otherwise_post_guard_block, outside_scope, source_info);
source_info.span,
region_scope,
otherwise_post_guard_block,
outside_scope,
);
self.false_edges( self.false_edges(
outside_scope, outside_scope,
otherwise_block, otherwise_block,

View file

@ -418,7 +418,6 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
let bool_ty = self.hir.bool_ty(); let bool_ty = self.hir.bool_ty();
let eq_result = self.temp(bool_ty, source_info.span); let eq_result = self.temp(bool_ty, source_info.span);
let eq_block = self.cfg.start_new_block(); let eq_block = self.cfg.start_new_block();
let cleanup = self.diverge_cleanup();
self.cfg.terminate( self.cfg.terminate(
block, block,
source_info, source_info,
@ -436,11 +435,12 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
}), }),
args: vec![val, expect], args: vec![val, expect],
destination: Some((eq_result, eq_block)), destination: Some((eq_result, eq_block)),
cleanup: Some(cleanup), cleanup: None,
from_hir_call: false, from_hir_call: false,
fn_span: source_info.span, fn_span: source_info.span,
}, },
); );
self.diverge_from(block);
if let [success_block, fail_block] = *make_target_blocks(self) { if let [success_block, fail_block] = *make_target_blocks(self) {
// check the result // check the result

View file

@ -352,11 +352,6 @@ struct Builder<'a, 'tcx> {
var_debug_info: Vec<VarDebugInfo<'tcx>>, var_debug_info: Vec<VarDebugInfo<'tcx>>,
/// Cached block with the `RESUME` terminator; this is created
/// when first set of cleanups are built.
cached_resume_block: Option<BasicBlock>,
/// Cached block with the `RETURN` terminator.
cached_return_block: Option<BasicBlock>,
/// Cached block with the `UNREACHABLE` terminator. /// Cached block with the `UNREACHABLE` terminator.
cached_unreachable_block: Option<BasicBlock>, cached_unreachable_block: Option<BasicBlock>,
} }
@ -617,50 +612,34 @@ where
region::Scope { id: body.value.hir_id.local_id, data: region::ScopeData::CallSite }; region::Scope { id: body.value.hir_id.local_id, data: region::ScopeData::CallSite };
let arg_scope = let arg_scope =
region::Scope { id: body.value.hir_id.local_id, data: region::ScopeData::Arguments }; region::Scope { id: body.value.hir_id.local_id, data: region::ScopeData::Arguments };
let mut block = START_BLOCK;
let source_info = builder.source_info(span); let source_info = builder.source_info(span);
let call_site_s = (call_site_scope, source_info); let call_site_s = (call_site_scope, source_info);
unpack!( unpack!(builder.in_scope(call_site_s, LintLevel::Inherited, |builder| {
block = builder.in_scope(call_site_s, LintLevel::Inherited, |builder| { let arg_scope_s = (arg_scope, source_info);
if should_abort_on_panic(tcx, fn_def_id, abi) { // Attribute epilogue to function's closing brace
builder.schedule_abort(); let fn_end = span_with_body.shrink_to_hi();
} let return_block =
unpack!(builder.in_breakable_scope(None, Place::return_place(), fn_end, |builder| {
let arg_scope_s = (arg_scope, source_info); Some(builder.in_scope(arg_scope_s, LintLevel::Inherited, |builder| {
// `return_block` is called when we evaluate a `return` expression, so builder.args_and_body(
// we just use `START_BLOCK` here. START_BLOCK,
unpack!( fn_def_id.to_def_id(),
block = builder.in_breakable_scope( &arguments,
None, arg_scope,
START_BLOCK, &body.value,
Place::return_place(), )
|builder| { }))
builder.in_scope(arg_scope_s, LintLevel::Inherited, |builder| { }));
builder.args_and_body( let source_info = builder.source_info(fn_end);
block, builder.cfg.terminate(return_block, source_info, TerminatorKind::Return);
fn_def_id.to_def_id(), let should_abort = should_abort_on_panic(tcx, fn_def_id, abi);
&arguments, builder.build_drop_trees(should_abort);
arg_scope, // Attribute any unreachable codepaths to the function's closing brace
&body.value, if let Some(unreachable_block) = builder.cached_unreachable_block {
) builder.cfg.terminate(unreachable_block, source_info, TerminatorKind::Unreachable);
}) }
}, return_block.unit()
) }));
);
// Attribute epilogue to function's closing brace
let fn_end = span_with_body.shrink_to_hi();
let source_info = builder.source_info(fn_end);
let return_block = builder.return_block();
builder.cfg.goto(block, source_info, return_block);
builder.cfg.terminate(return_block, source_info, TerminatorKind::Return);
// Attribute any unreachable codepaths to the function's closing brace
if let Some(unreachable_block) = builder.cached_unreachable_block {
builder.cfg.terminate(unreachable_block, source_info, TerminatorKind::Unreachable);
}
return_block.unit()
})
);
assert_eq!(block, builder.return_block());
let spread_arg = if abi == Abi::RustCall { let spread_arg = if abi == Abi::RustCall {
// RustCall pseudo-ABI untuples the last argument. // RustCall pseudo-ABI untuples the last argument.
@ -695,8 +674,7 @@ fn construct_const<'a, 'tcx>(
let source_info = builder.source_info(span); let source_info = builder.source_info(span);
builder.cfg.terminate(block, source_info, TerminatorKind::Return); builder.cfg.terminate(block, source_info, TerminatorKind::Return);
// Constants can't `return` so a return block should not be created. builder.build_drop_trees(false);
assert_eq!(builder.cached_return_block, None);
// Constants may be match expressions in which case an unreachable block may // Constants may be match expressions in which case an unreachable block may
// be created, so terminate it properly. // be created, so terminate it properly.
@ -766,7 +744,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
fn_span: span, fn_span: span,
arg_count, arg_count,
generator_kind, generator_kind,
scopes: Default::default(), scopes: scope::Scopes::new(),
block_context: BlockContext::new(), block_context: BlockContext::new(),
source_scopes: IndexVec::new(), source_scopes: IndexVec::new(),
source_scope: OUTERMOST_SOURCE_SCOPE, source_scope: OUTERMOST_SOURCE_SCOPE,
@ -779,8 +757,6 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
var_indices: Default::default(), var_indices: Default::default(),
unit_temp: None, unit_temp: None,
var_debug_info: vec![], var_debug_info: vec![],
cached_resume_block: None,
cached_return_block: None,
cached_unreachable_block: None, cached_unreachable_block: None,
}; };
@ -1016,17 +992,6 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
} }
} }
} }
fn return_block(&mut self) -> BasicBlock {
match self.cached_return_block {
Some(rb) => rb,
None => {
let rb = self.cfg.start_new_block();
self.cached_return_block = Some(rb);
rb
}
}
}
} }
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////

File diff suppressed because it is too large Load diff

View file

@ -23,13 +23,13 @@ pub fn droppy() {
// FIXME(eddyb) the `void @` forces a match on the instruction, instead of the // FIXME(eddyb) the `void @` forces a match on the instruction, instead of the
// comment, that's `; call core::intrinsics::drop_in_place::<drop::SomeUniqueName>` // comment, that's `; call core::intrinsics::drop_in_place::<drop::SomeUniqueName>`
// for the `v0` mangling, should switch to matching on that once `legacy` is gone. // for the `v0` mangling, should switch to matching on that once `legacy` is gone.
// CHECK-NOT: call void @{{.*}}drop_in_place{{.*}}SomeUniqueName
// CHECK: invoke void @{{.*}}drop_in_place{{.*}}SomeUniqueName
// CHECK: invoke void @{{.*}}drop_in_place{{.*}}SomeUniqueName
// CHECK-NOT: invoke void @{{.*}}drop_in_place{{.*}}SomeUniqueName // CHECK-NOT: invoke void @{{.*}}drop_in_place{{.*}}SomeUniqueName
// CHECK: call void @{{.*}}drop_in_place{{.*}}SomeUniqueName // CHECK: call void @{{.*}}drop_in_place{{.*}}SomeUniqueName
// CHECK: call void @{{.*}}drop_in_place{{.*}}SomeUniqueName // CHECK: call void @{{.*}}drop_in_place{{.*}}SomeUniqueName
// CHECK-NOT: call void @{{.*}}drop_in_place{{.*}}SomeUniqueName
// CHECK: invoke void @{{.*}}drop_in_place{{.*}}SomeUniqueName
// CHECK: call void @{{.*}}drop_in_place{{.*}}SomeUniqueName // CHECK: call void @{{.*}}drop_in_place{{.*}}SomeUniqueName
// CHECK: invoke void @{{.*}}drop_in_place{{.*}}SomeUniqueName
// CHECK: call void @{{.*}}drop_in_place{{.*}}SomeUniqueName // CHECK: call void @{{.*}}drop_in_place{{.*}}SomeUniqueName
// CHECK-NOT: {{(call|invoke) void @.*}}drop_in_place{{.*}}SomeUniqueName // CHECK-NOT: {{(call|invoke) void @.*}}drop_in_place{{.*}}SomeUniqueName
// The next line checks for the } that ends the function definition // The next line checks for the } that ends the function definition

View file

@ -41,44 +41,44 @@ fn main() -> () {
StorageLive(_5); // scope 3 at $DIR/basic_assignment.rs:19:9: 19:15 StorageLive(_5); // scope 3 at $DIR/basic_assignment.rs:19:9: 19:15
StorageLive(_6); // scope 4 at $DIR/basic_assignment.rs:23:14: 23:20 StorageLive(_6); // scope 4 at $DIR/basic_assignment.rs:23:14: 23:20
_6 = move _4; // scope 4 at $DIR/basic_assignment.rs:23:14: 23:20 _6 = move _4; // scope 4 at $DIR/basic_assignment.rs:23:14: 23:20
replace(_5 <- move _6) -> [return: bb2, unwind: bb5]; // scope 4 at $DIR/basic_assignment.rs:23:5: 23:11 replace(_5 <- move _6) -> [return: bb1, unwind: bb5]; // scope 4 at $DIR/basic_assignment.rs:23:5: 23:11
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/basic_assignment.rs:10:1: 24:2 drop(_6) -> [return: bb2, unwind: bb6]; // scope 4 at $DIR/basic_assignment.rs:23:19: 23:20
} }
bb2: { bb2: {
drop(_6) -> [return: bb6, unwind: bb4]; // scope 4 at $DIR/basic_assignment.rs:23:19: 23:20
}
bb3 (cleanup): {
drop(_4) -> bb1; // scope 2 at $DIR/basic_assignment.rs:24:1: 24:2
}
bb4 (cleanup): {
drop(_5) -> bb3; // scope 3 at $DIR/basic_assignment.rs:24:1: 24:2
}
bb5 (cleanup): {
drop(_6) -> bb4; // scope 4 at $DIR/basic_assignment.rs:23:19: 23:20
}
bb6: {
StorageDead(_6); // scope 4 at $DIR/basic_assignment.rs:23:19: 23:20 StorageDead(_6); // scope 4 at $DIR/basic_assignment.rs:23:19: 23:20
_0 = const (); // scope 0 at $DIR/basic_assignment.rs:10:11: 24:2 _0 = const (); // scope 0 at $DIR/basic_assignment.rs:10:11: 24:2
drop(_5) -> [return: bb7, unwind: bb3]; // scope 3 at $DIR/basic_assignment.rs:24:1: 24:2 drop(_5) -> [return: bb3, unwind: bb7]; // scope 3 at $DIR/basic_assignment.rs:24:1: 24:2
} }
bb7: { bb3: {
StorageDead(_5); // scope 3 at $DIR/basic_assignment.rs:24:1: 24:2 StorageDead(_5); // scope 3 at $DIR/basic_assignment.rs:24:1: 24:2
drop(_4) -> [return: bb8, unwind: bb1]; // scope 2 at $DIR/basic_assignment.rs:24:1: 24:2 drop(_4) -> [return: bb4, unwind: bb8]; // scope 2 at $DIR/basic_assignment.rs:24:1: 24:2
} }
bb8: { bb4: {
StorageDead(_4); // scope 2 at $DIR/basic_assignment.rs:24:1: 24:2 StorageDead(_4); // scope 2 at $DIR/basic_assignment.rs:24:1: 24:2
StorageDead(_2); // scope 1 at $DIR/basic_assignment.rs:24:1: 24:2 StorageDead(_2); // scope 1 at $DIR/basic_assignment.rs:24:1: 24:2
StorageDead(_1); // scope 0 at $DIR/basic_assignment.rs:24:1: 24:2 StorageDead(_1); // scope 0 at $DIR/basic_assignment.rs:24:1: 24:2
return; // scope 0 at $DIR/basic_assignment.rs:24:2: 24:2 return; // scope 0 at $DIR/basic_assignment.rs:24:2: 24:2
} }
bb5 (cleanup): {
drop(_6) -> bb6; // scope 4 at $DIR/basic_assignment.rs:23:19: 23:20
}
bb6 (cleanup): {
drop(_5) -> bb7; // scope 3 at $DIR/basic_assignment.rs:24:1: 24:2
}
bb7 (cleanup): {
drop(_4) -> bb8; // scope 2 at $DIR/basic_assignment.rs:24:1: 24:2
}
bb8 (cleanup): {
resume; // scope 0 at $DIR/basic_assignment.rs:10:1: 24:2
}
} }

View file

@ -14,53 +14,53 @@ fn main() -> () {
StorageLive(_1); // scope 0 at $DIR/box_expr.rs:7:9: 7:10 StorageLive(_1); // scope 0 at $DIR/box_expr.rs:7:9: 7:10
StorageLive(_2); // scope 0 at $DIR/box_expr.rs:7:13: 7:25 StorageLive(_2); // scope 0 at $DIR/box_expr.rs:7:13: 7:25
_2 = Box(S); // scope 0 at $DIR/box_expr.rs:7:13: 7:25 _2 = Box(S); // scope 0 at $DIR/box_expr.rs:7:13: 7:25
(*_2) = S::new() -> [return: bb2, unwind: bb3]; // scope 0 at $DIR/box_expr.rs:7:17: 7:25 (*_2) = S::new() -> [return: bb1, unwind: bb7]; // scope 0 at $DIR/box_expr.rs:7:17: 7:25
// mir::Constant // mir::Constant
// + span: $DIR/box_expr.rs:7:17: 7:23 // + span: $DIR/box_expr.rs:7:17: 7:23
// + literal: Const { ty: fn() -> S {S::new}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn() -> S {S::new}, val: Value(Scalar(<ZST>)) }
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/box_expr.rs:6:1: 9:2 _1 = move _2; // scope 0 at $DIR/box_expr.rs:7:13: 7:25
drop(_2) -> bb2; // scope 0 at $DIR/box_expr.rs:7:24: 7:25
} }
bb2: { bb2: {
_1 = move _2; // scope 0 at $DIR/box_expr.rs:7:13: 7:25
drop(_2) -> bb4; // scope 0 at $DIR/box_expr.rs:7:24: 7:25
}
bb3 (cleanup): {
drop(_2) -> bb1; // scope 0 at $DIR/box_expr.rs:7:24: 7:25
}
bb4: {
StorageDead(_2); // scope 0 at $DIR/box_expr.rs:7:24: 7:25 StorageDead(_2); // scope 0 at $DIR/box_expr.rs:7:24: 7:25
StorageLive(_3); // scope 1 at $DIR/box_expr.rs:8:5: 8:12 StorageLive(_3); // scope 1 at $DIR/box_expr.rs:8:5: 8:12
StorageLive(_4); // scope 1 at $DIR/box_expr.rs:8:10: 8:11 StorageLive(_4); // scope 1 at $DIR/box_expr.rs:8:10: 8:11
_4 = move _1; // scope 1 at $DIR/box_expr.rs:8:10: 8:11 _4 = move _1; // scope 1 at $DIR/box_expr.rs:8:10: 8:11
_3 = std::mem::drop::<Box<S>>(move _4) -> [return: bb5, unwind: bb7]; // scope 1 at $DIR/box_expr.rs:8:5: 8:12 _3 = std::mem::drop::<Box<S>>(move _4) -> [return: bb3, unwind: bb5]; // scope 1 at $DIR/box_expr.rs:8:5: 8:12
// mir::Constant // mir::Constant
// + span: $DIR/box_expr.rs:8:5: 8:9 // + span: $DIR/box_expr.rs:8:5: 8:9
// + literal: Const { ty: fn(std::boxed::Box<S>) {std::mem::drop::<std::boxed::Box<S>>}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn(std::boxed::Box<S>) {std::mem::drop::<std::boxed::Box<S>>}, val: Value(Scalar(<ZST>)) }
} }
bb5: { bb3: {
StorageDead(_4); // scope 1 at $DIR/box_expr.rs:8:11: 8:12 StorageDead(_4); // scope 1 at $DIR/box_expr.rs:8:11: 8:12
StorageDead(_3); // scope 1 at $DIR/box_expr.rs:8:12: 8:13 StorageDead(_3); // scope 1 at $DIR/box_expr.rs:8:12: 8:13
_0 = const (); // scope 0 at $DIR/box_expr.rs:6:11: 9:2 _0 = const (); // scope 0 at $DIR/box_expr.rs:6:11: 9:2
drop(_1) -> bb8; // scope 0 at $DIR/box_expr.rs:9:1: 9:2 drop(_1) -> bb4; // scope 0 at $DIR/box_expr.rs:9:1: 9:2
} }
bb6 (cleanup): { bb4: {
drop(_1) -> bb1; // scope 0 at $DIR/box_expr.rs:9:1: 9:2
}
bb7 (cleanup): {
drop(_4) -> bb6; // scope 1 at $DIR/box_expr.rs:8:11: 8:12
}
bb8: {
StorageDead(_1); // scope 0 at $DIR/box_expr.rs:9:1: 9:2 StorageDead(_1); // scope 0 at $DIR/box_expr.rs:9:1: 9:2
return; // scope 0 at $DIR/box_expr.rs:9:2: 9:2 return; // scope 0 at $DIR/box_expr.rs:9:2: 9:2
} }
bb5 (cleanup): {
drop(_4) -> bb6; // scope 1 at $DIR/box_expr.rs:8:11: 8:12
}
bb6 (cleanup): {
drop(_1) -> bb8; // scope 0 at $DIR/box_expr.rs:9:1: 9:2
}
bb7 (cleanup): {
drop(_2) -> bb8; // scope 0 at $DIR/box_expr.rs:7:24: 7:25
}
bb8 (cleanup): {
resume; // scope 0 at $DIR/box_expr.rs:6:1: 9:2
}
} }

View file

@ -33,21 +33,21 @@
+ // + literal: Const { ty: &[&i32; 1], val: Unevaluated(WithOptConstParam { did: DefId(0:6 ~ const_promotion_extern_static[317d]::BAR), const_param_did: None }, [], Some(promoted[0])) } + // + literal: Const { ty: &[&i32; 1], val: Unevaluated(WithOptConstParam { did: DefId(0:6 ~ const_promotion_extern_static[317d]::BAR), const_param_did: None }, [], Some(promoted[0])) }
+ _2 = &(*_6); // scope 0 at $DIR/const-promotion-extern-static.rs:9:31: 9:35 + _2 = &(*_6); // scope 0 at $DIR/const-promotion-extern-static.rs:9:31: 9:35
_1 = move _2 as &[&i32] (Pointer(Unsize)); // scope 0 at $DIR/const-promotion-extern-static.rs:9:31: 9:35 _1 = move _2 as &[&i32] (Pointer(Unsize)); // scope 0 at $DIR/const-promotion-extern-static.rs:9:31: 9:35
_0 = core::slice::<impl [&i32]>::as_ptr(move _1) -> [return: bb2, unwind: bb1]; // scope 0 at $DIR/const-promotion-extern-static.rs:9:31: 9:44 _0 = core::slice::<impl [&i32]>::as_ptr(move _1) -> [return: bb1, unwind: bb2]; // scope 0 at $DIR/const-promotion-extern-static.rs:9:31: 9:44
// mir::Constant // mir::Constant
// + span: $DIR/const-promotion-extern-static.rs:9:36: 9:42 // + span: $DIR/const-promotion-extern-static.rs:9:36: 9:42
// + literal: Const { ty: for<'r> fn(&'r [&i32]) -> *const &i32 {core::slice::<impl [&i32]>::as_ptr}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: for<'r> fn(&'r [&i32]) -> *const &i32 {core::slice::<impl [&i32]>::as_ptr}, val: Value(Scalar(<ZST>)) }
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/const-promotion-extern-static.rs:9:1: 9:45
}
bb2: {
- StorageDead(_5); // scope 0 at $DIR/const-promotion-extern-static.rs:9:43: 9:44 - StorageDead(_5); // scope 0 at $DIR/const-promotion-extern-static.rs:9:43: 9:44
- StorageDead(_3); // scope 0 at $DIR/const-promotion-extern-static.rs:9:43: 9:44 - StorageDead(_3); // scope 0 at $DIR/const-promotion-extern-static.rs:9:43: 9:44
return; // scope 0 at $DIR/const-promotion-extern-static.rs:9:1: 9:45 return; // scope 0 at $DIR/const-promotion-extern-static.rs:9:1: 9:45
} }
bb2 (cleanup): {
resume; // scope 0 at $DIR/const-promotion-extern-static.rs:9:1: 9:45
}
- } - }
- -
- alloc0 (static: Y, size: 4, align: 4) { - alloc0 (static: Y, size: 4, align: 4) {

View file

@ -35,21 +35,21 @@
+ // + literal: Const { ty: &[&i32; 1], val: Unevaluated(WithOptConstParam { did: DefId(0:7 ~ const_promotion_extern_static[317d]::FOO), const_param_did: None }, [], Some(promoted[0])) } + // + literal: Const { ty: &[&i32; 1], val: Unevaluated(WithOptConstParam { did: DefId(0:7 ~ const_promotion_extern_static[317d]::FOO), const_param_did: None }, [], Some(promoted[0])) }
+ _2 = &(*_6); // scope 0 at $DIR/const-promotion-extern-static.rs:13:31: 13:46 + _2 = &(*_6); // scope 0 at $DIR/const-promotion-extern-static.rs:13:31: 13:46
_1 = move _2 as &[&i32] (Pointer(Unsize)); // scope 0 at $DIR/const-promotion-extern-static.rs:13:31: 13:46 _1 = move _2 as &[&i32] (Pointer(Unsize)); // scope 0 at $DIR/const-promotion-extern-static.rs:13:31: 13:46
_0 = core::slice::<impl [&i32]>::as_ptr(move _1) -> [return: bb2, unwind: bb1]; // scope 0 at $DIR/const-promotion-extern-static.rs:13:31: 13:55 _0 = core::slice::<impl [&i32]>::as_ptr(move _1) -> [return: bb1, unwind: bb2]; // scope 0 at $DIR/const-promotion-extern-static.rs:13:31: 13:55
// mir::Constant // mir::Constant
// + span: $DIR/const-promotion-extern-static.rs:13:47: 13:53 // + span: $DIR/const-promotion-extern-static.rs:13:47: 13:53
// + literal: Const { ty: for<'r> fn(&'r [&i32]) -> *const &i32 {core::slice::<impl [&i32]>::as_ptr}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: for<'r> fn(&'r [&i32]) -> *const &i32 {core::slice::<impl [&i32]>::as_ptr}, val: Value(Scalar(<ZST>)) }
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/const-promotion-extern-static.rs:13:1: 13:56
}
bb2: {
- StorageDead(_5); // scope 0 at $DIR/const-promotion-extern-static.rs:13:54: 13:55 - StorageDead(_5); // scope 0 at $DIR/const-promotion-extern-static.rs:13:54: 13:55
- StorageDead(_3); // scope 0 at $DIR/const-promotion-extern-static.rs:13:54: 13:55 - StorageDead(_3); // scope 0 at $DIR/const-promotion-extern-static.rs:13:54: 13:55
return; // scope 0 at $DIR/const-promotion-extern-static.rs:13:1: 13:56 return; // scope 0 at $DIR/const-promotion-extern-static.rs:13:1: 13:56
} }
bb2 (cleanup): {
resume; // scope 0 at $DIR/const-promotion-extern-static.rs:13:1: 13:56
}
} }
- -
- alloc2 (extern static: X) - alloc2 (extern static: X)

View file

@ -23,18 +23,18 @@
_2 = (*_3); // scope 0 at $DIR/boxes.rs:12:13: 12:22 _2 = (*_3); // scope 0 at $DIR/boxes.rs:12:13: 12:22
_1 = Add(move _2, const 0_i32); // scope 0 at $DIR/boxes.rs:12:13: 12:26 _1 = Add(move _2, const 0_i32); // scope 0 at $DIR/boxes.rs:12:13: 12:26
StorageDead(_2); // scope 0 at $DIR/boxes.rs:12:25: 12:26 StorageDead(_2); // scope 0 at $DIR/boxes.rs:12:25: 12:26
drop(_3) -> [return: bb2, unwind: bb1]; // scope 0 at $DIR/boxes.rs:12:26: 12:27 drop(_3) -> [return: bb1, unwind: bb2]; // scope 0 at $DIR/boxes.rs:12:26: 12:27
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/boxes.rs:11:1: 13:2
}
bb2: {
StorageDead(_3); // scope 0 at $DIR/boxes.rs:12:26: 12:27 StorageDead(_3); // scope 0 at $DIR/boxes.rs:12:26: 12:27
_0 = const (); // scope 0 at $DIR/boxes.rs:11:11: 13:2 _0 = const (); // scope 0 at $DIR/boxes.rs:11:11: 13:2
StorageDead(_1); // scope 0 at $DIR/boxes.rs:13:1: 13:2 StorageDead(_1); // scope 0 at $DIR/boxes.rs:13:1: 13:2
return; // scope 0 at $DIR/boxes.rs:13:2: 13:2 return; // scope 0 at $DIR/boxes.rs:13:2: 13:2
} }
bb2 (cleanup): {
resume; // scope 0 at $DIR/boxes.rs:11:1: 13:2
}
} }

View file

@ -109,7 +109,7 @@
- StorageDead(_4); // scope 0 at $DIR/early_otherwise_branch_68867.rs:29:1: 29:2 - StorageDead(_4); // scope 0 at $DIR/early_otherwise_branch_68867.rs:29:1: 29:2
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:28:6: 28:7 + nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:28:6: 28:7
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:29:1: 29:2 + nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:29:1: 29:2
return; // scope 0 at $DIR/early_otherwise_branch_68867.rs:27:14: 27:28 return; // scope 0 at $DIR/early_otherwise_branch_68867.rs:29:2: 29:2
} }
+ bb2: { + bb2: {

View file

@ -89,7 +89,7 @@
StorageDead(_33); // scope 0 at $DIR/early_otherwise_branch_68867.rs:27:27: 27:28 StorageDead(_33); // scope 0 at $DIR/early_otherwise_branch_68867.rs:27:27: 27:28
StorageDead(_3); // scope 0 at $DIR/early_otherwise_branch_68867.rs:28:6: 28:7 StorageDead(_3); // scope 0 at $DIR/early_otherwise_branch_68867.rs:28:6: 28:7
StorageDead(_4); // scope 0 at $DIR/early_otherwise_branch_68867.rs:29:1: 29:2 StorageDead(_4); // scope 0 at $DIR/early_otherwise_branch_68867.rs:29:1: 29:2
return; // scope 0 at $DIR/early_otherwise_branch_68867.rs:27:14: 27:28 return; // scope 0 at $DIR/early_otherwise_branch_68867.rs:29:2: 29:2
} }
- bb3: { - bb3: {

View file

@ -34,60 +34,56 @@ fn main::{closure#0}(_1: *mut [generator@$DIR/generator-drop-cleanup.rs:10:15: 1
bb0: { bb0: {
_9 = discriminant((*_1)); // scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6 _9 = discriminant((*_1)); // scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6
switchInt(move _9) -> [0_u32: bb7, 3_u32: bb11, otherwise: bb12]; // scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6 switchInt(move _9) -> [0_u32: bb7, 3_u32: bb10, otherwise: bb11]; // scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6 StorageDead(_5); // scope 1 at $DIR/generator-drop-cleanup.rs:12:13: 12:14
StorageDead(_4); // scope 1 at $DIR/generator-drop-cleanup.rs:12:14: 12:15
drop((((*_1) as variant#3).0: std::string::String)) -> [return: bb2, unwind: bb5]; // scope 0 at $DIR/generator-drop-cleanup.rs:13:5: 13:6
} }
bb2 (cleanup): { bb2: {
nop; // scope 0 at $DIR/generator-drop-cleanup.rs:13:5: 13:6 nop; // scope 0 at $DIR/generator-drop-cleanup.rs:13:5: 13:6
goto -> bb8; // scope 0 at $DIR/generator-drop-cleanup.rs:13:5: 13:6 goto -> bb8; // scope 0 at $DIR/generator-drop-cleanup.rs:13:5: 13:6
} }
bb3: { bb3: {
StorageDead(_5); // scope 1 at $DIR/generator-drop-cleanup.rs:12:13: 12:14
StorageDead(_4); // scope 1 at $DIR/generator-drop-cleanup.rs:12:14: 12:15
drop((((*_1) as variant#3).0: std::string::String)) -> [return: bb4, unwind: bb2]; // scope 0 at $DIR/generator-drop-cleanup.rs:13:5: 13:6
}
bb4: {
nop; // scope 0 at $DIR/generator-drop-cleanup.rs:13:5: 13:6
goto -> bb9; // scope 0 at $DIR/generator-drop-cleanup.rs:13:5: 13:6
}
bb5: {
return; // scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6 return; // scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6
} }
bb4 (cleanup): {
resume; // scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6
}
bb5 (cleanup): {
nop; // scope 0 at $DIR/generator-drop-cleanup.rs:13:5: 13:6
goto -> bb4; // scope 0 at $DIR/generator-drop-cleanup.rs:13:5: 13:6
}
bb6: { bb6: {
return; // scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6 return; // scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6
} }
bb7: { bb7: {
goto -> bb10; // scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6 goto -> bb9; // scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6
} }
bb8 (cleanup): { bb8: {
goto -> bb1; // scope 0 at $DIR/generator-drop-cleanup.rs:13:5: 13:6 goto -> bb3; // scope 0 at $DIR/generator-drop-cleanup.rs:13:5: 13:6
} }
bb9: { bb9: {
goto -> bb5; // scope 0 at $DIR/generator-drop-cleanup.rs:13:5: 13:6
}
bb10: {
goto -> bb6; // scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6 goto -> bb6; // scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6
} }
bb11: { bb10: {
StorageLive(_4); // scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6 StorageLive(_4); // scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6
StorageLive(_5); // scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6 StorageLive(_5); // scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6
goto -> bb3; // scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6 goto -> bb1; // scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6
} }
bb12: { bb11: {
return; // scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6 return; // scope 0 at $DIR/generator-drop-cleanup.rs:10:15: 13:6
} }
} }

View file

@ -26,86 +26,86 @@ yields ()
(_4.0: i32) = const 6_i32; // scope 1 at $DIR/generator-storage-dead-unwind.rs:24:17: 24:23 (_4.0: i32) = const 6_i32; // scope 1 at $DIR/generator-storage-dead-unwind.rs:24:17: 24:23
StorageLive(_5); // scope 2 at $DIR/generator-storage-dead-unwind.rs:25:9: 25:14 StorageLive(_5); // scope 2 at $DIR/generator-storage-dead-unwind.rs:25:9: 25:14
StorageLive(_6); // scope 2 at $DIR/generator-storage-dead-unwind.rs:25:9: 25:14 StorageLive(_6); // scope 2 at $DIR/generator-storage-dead-unwind.rs:25:9: 25:14
_5 = yield(move _6) -> [resume: bb2, drop: bb4]; // scope 2 at $DIR/generator-storage-dead-unwind.rs:25:9: 25:14 _5 = yield(move _6) -> [resume: bb1, drop: bb5]; // scope 2 at $DIR/generator-storage-dead-unwind.rs:25:9: 25:14
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/generator-storage-dead-unwind.rs:22:16: 28:6
}
bb2: {
StorageDead(_6); // scope 2 at $DIR/generator-storage-dead-unwind.rs:25:13: 25:14 StorageDead(_6); // scope 2 at $DIR/generator-storage-dead-unwind.rs:25:13: 25:14
StorageDead(_5); // scope 2 at $DIR/generator-storage-dead-unwind.rs:25:14: 25:15 StorageDead(_5); // scope 2 at $DIR/generator-storage-dead-unwind.rs:25:14: 25:15
StorageLive(_7); // scope 2 at $DIR/generator-storage-dead-unwind.rs:26:9: 26:16 StorageLive(_7); // scope 2 at $DIR/generator-storage-dead-unwind.rs:26:9: 26:16
StorageLive(_8); // scope 2 at $DIR/generator-storage-dead-unwind.rs:26:14: 26:15 StorageLive(_8); // scope 2 at $DIR/generator-storage-dead-unwind.rs:26:14: 26:15
_8 = move _3; // scope 2 at $DIR/generator-storage-dead-unwind.rs:26:14: 26:15 _8 = move _3; // scope 2 at $DIR/generator-storage-dead-unwind.rs:26:14: 26:15
_7 = take::<Foo>(move _8) -> [return: bb7, unwind: bb9]; // scope 2 at $DIR/generator-storage-dead-unwind.rs:26:9: 26:16 _7 = take::<Foo>(move _8) -> [return: bb2, unwind: bb9]; // scope 2 at $DIR/generator-storage-dead-unwind.rs:26:9: 26:16
// mir::Constant // mir::Constant
// + span: $DIR/generator-storage-dead-unwind.rs:26:9: 26:13 // + span: $DIR/generator-storage-dead-unwind.rs:26:9: 26:13
// + literal: Const { ty: fn(Foo) {take::<Foo>}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn(Foo) {take::<Foo>}, val: Value(Scalar(<ZST>)) }
} }
bb3 (cleanup): { bb2: {
StorageDead(_3); // scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
drop(_1) -> bb1; // scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
}
bb4: {
StorageDead(_6); // scope 2 at $DIR/generator-storage-dead-unwind.rs:25:13: 25:14
StorageDead(_5); // scope 2 at $DIR/generator-storage-dead-unwind.rs:25:14: 25:15
StorageDead(_4); // scope 1 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
drop(_3) -> [return: bb5, unwind: bb3]; // scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
}
bb5: {
StorageDead(_3); // scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
drop(_1) -> [return: bb6, unwind: bb1]; // scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
}
bb6: {
generator_drop; // scope 0 at $DIR/generator-storage-dead-unwind.rs:22:16: 28:6
}
bb7: {
StorageDead(_8); // scope 2 at $DIR/generator-storage-dead-unwind.rs:26:15: 26:16 StorageDead(_8); // scope 2 at $DIR/generator-storage-dead-unwind.rs:26:15: 26:16
StorageDead(_7); // scope 2 at $DIR/generator-storage-dead-unwind.rs:26:16: 26:17 StorageDead(_7); // scope 2 at $DIR/generator-storage-dead-unwind.rs:26:16: 26:17
StorageLive(_9); // scope 2 at $DIR/generator-storage-dead-unwind.rs:27:9: 27:16 StorageLive(_9); // scope 2 at $DIR/generator-storage-dead-unwind.rs:27:9: 27:16
StorageLive(_10); // scope 2 at $DIR/generator-storage-dead-unwind.rs:27:14: 27:15 StorageLive(_10); // scope 2 at $DIR/generator-storage-dead-unwind.rs:27:14: 27:15
_10 = move _4; // scope 2 at $DIR/generator-storage-dead-unwind.rs:27:14: 27:15 _10 = move _4; // scope 2 at $DIR/generator-storage-dead-unwind.rs:27:14: 27:15
_9 = take::<Bar>(move _10) -> [return: bb10, unwind: bb11]; // scope 2 at $DIR/generator-storage-dead-unwind.rs:27:9: 27:16 _9 = take::<Bar>(move _10) -> [return: bb3, unwind: bb8]; // scope 2 at $DIR/generator-storage-dead-unwind.rs:27:9: 27:16
// mir::Constant // mir::Constant
// + span: $DIR/generator-storage-dead-unwind.rs:27:9: 27:13 // + span: $DIR/generator-storage-dead-unwind.rs:27:9: 27:13
// + literal: Const { ty: fn(Bar) {take::<Bar>}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn(Bar) {take::<Bar>}, val: Value(Scalar(<ZST>)) }
} }
bb8 (cleanup): { bb3: {
StorageDead(_4); // scope 1 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
StorageDead(_3); // scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
drop(_1) -> bb1; // scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
}
bb9 (cleanup): {
StorageDead(_8); // scope 2 at $DIR/generator-storage-dead-unwind.rs:26:15: 26:16
StorageDead(_7); // scope 2 at $DIR/generator-storage-dead-unwind.rs:26:16: 26:17
goto -> bb8; // scope 2 at $DIR/generator-storage-dead-unwind.rs:1:1: 1:1
}
bb10: {
StorageDead(_10); // scope 2 at $DIR/generator-storage-dead-unwind.rs:27:15: 27:16 StorageDead(_10); // scope 2 at $DIR/generator-storage-dead-unwind.rs:27:15: 27:16
StorageDead(_9); // scope 2 at $DIR/generator-storage-dead-unwind.rs:27:16: 27:17 StorageDead(_9); // scope 2 at $DIR/generator-storage-dead-unwind.rs:27:16: 27:17
_0 = const (); // scope 0 at $DIR/generator-storage-dead-unwind.rs:22:19: 28:6 _0 = const (); // scope 0 at $DIR/generator-storage-dead-unwind.rs:22:19: 28:6
StorageDead(_4); // scope 1 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6 StorageDead(_4); // scope 1 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
StorageDead(_3); // scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6 StorageDead(_3); // scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
drop(_1) -> [return: bb12, unwind: bb1]; // scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6 drop(_1) -> [return: bb4, unwind: bb11]; // scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
}
bb4: {
return; // scope 0 at $DIR/generator-storage-dead-unwind.rs:28:6: 28:6
}
bb5: {
StorageDead(_6); // scope 2 at $DIR/generator-storage-dead-unwind.rs:25:13: 25:14
StorageDead(_5); // scope 2 at $DIR/generator-storage-dead-unwind.rs:25:14: 25:15
StorageDead(_4); // scope 1 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
drop(_3) -> [return: bb6, unwind: bb12]; // scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
}
bb6: {
StorageDead(_3); // scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
drop(_1) -> [return: bb7, unwind: bb11]; // scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
}
bb7: {
generator_drop; // scope 0 at $DIR/generator-storage-dead-unwind.rs:22:16: 28:6
}
bb8 (cleanup): {
StorageDead(_10); // scope 2 at $DIR/generator-storage-dead-unwind.rs:27:15: 27:16
StorageDead(_9); // scope 2 at $DIR/generator-storage-dead-unwind.rs:27:16: 27:17
goto -> bb10; // scope 2 at $DIR/generator-storage-dead-unwind.rs:1:1: 1:1
}
bb9 (cleanup): {
StorageDead(_8); // scope 2 at $DIR/generator-storage-dead-unwind.rs:26:15: 26:16
StorageDead(_7); // scope 2 at $DIR/generator-storage-dead-unwind.rs:26:16: 26:17
goto -> bb10; // scope 2 at $DIR/generator-storage-dead-unwind.rs:1:1: 1:1
}
bb10 (cleanup): {
StorageDead(_4); // scope 1 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
StorageDead(_3); // scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
drop(_1) -> bb11; // scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
} }
bb11 (cleanup): { bb11 (cleanup): {
StorageDead(_10); // scope 2 at $DIR/generator-storage-dead-unwind.rs:27:15: 27:16 resume; // scope 0 at $DIR/generator-storage-dead-unwind.rs:22:16: 28:6
StorageDead(_9); // scope 2 at $DIR/generator-storage-dead-unwind.rs:27:16: 27:17
goto -> bb8; // scope 2 at $DIR/generator-storage-dead-unwind.rs:1:1: 1:1
} }
bb12: { bb12 (cleanup): {
return; // scope 0 at $DIR/generator-storage-dead-unwind.rs:28:6: 28:6 StorageDead(_3); // scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
drop(_1) -> bb11; // scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
} }
} }

View file

@ -3,8 +3,5 @@ digraph Mir_0_3 {
node [fontname="Courier, monospace"]; node [fontname="Courier, monospace"];
edge [fontname="Courier, monospace"]; edge [fontname="Courier, monospace"];
label=<fn main() -&gt; ()<br align="left"/>>; label=<fn main() -&gt; ()<br align="left"/>>;
bb0__0_3 [shape="none", label=<<table border="0" cellborder="1" cellspacing="0"><tr><td bgcolor="gray" align="center" colspan="1">0</td></tr><tr><td align="left" balign="left">_0 = const ()<br/></td></tr><tr><td align="left">goto</td></tr></table>>]; bb0__0_3 [shape="none", label=<<table border="0" cellborder="1" cellspacing="0"><tr><td bgcolor="gray" align="center" colspan="1">0</td></tr><tr><td align="left" balign="left">_0 = const ()<br/></td></tr><tr><td align="left">return</td></tr></table>>];
bb1__0_3 [shape="none", label=<<table border="0" cellborder="1" cellspacing="0"><tr><td bgcolor="gray" align="center" colspan="1">1</td></tr><tr><td align="left">resume</td></tr></table>>];
bb2__0_3 [shape="none", label=<<table border="0" cellborder="1" cellspacing="0"><tr><td bgcolor="gray" align="center" colspan="1">2</td></tr><tr><td align="left">return</td></tr></table>>];
bb0__0_3 -> bb2__0_3 [label=""];
} }

View file

@ -17,7 +17,7 @@
StorageLive(_1); // scope 0 at $DIR/inline-into-box-place.rs:8:9: 8:11 StorageLive(_1); // scope 0 at $DIR/inline-into-box-place.rs:8:9: 8:11
StorageLive(_2); // scope 0 at $DIR/inline-into-box-place.rs:8:29: 8:43 StorageLive(_2); // scope 0 at $DIR/inline-into-box-place.rs:8:29: 8:43
_2 = Box(std::vec::Vec<u32>); // scope 0 at $DIR/inline-into-box-place.rs:8:29: 8:43 _2 = Box(std::vec::Vec<u32>); // scope 0 at $DIR/inline-into-box-place.rs:8:29: 8:43
- (*_2) = Vec::<u32>::new() -> [return: bb2, unwind: bb4]; // scope 0 at $DIR/inline-into-box-place.rs:8:33: 8:43 - (*_2) = Vec::<u32>::new() -> [return: bb1, unwind: bb4]; // scope 0 at $DIR/inline-into-box-place.rs:8:33: 8:43
+ _4 = &mut (*_2); // scope 0 at $DIR/inline-into-box-place.rs:8:33: 8:43 + _4 = &mut (*_2); // scope 0 at $DIR/inline-into-box-place.rs:8:33: 8:43
+ ((*_4).0: alloc::raw_vec::RawVec<u32>) = const alloc::raw_vec::RawVec::<u32> { ptr: Unique::<u32> { pointer: {0x4 as *const u32}, _marker: PhantomData::<u32> }, cap: 0_usize, alloc: std::alloc::Global }; // scope 2 at $SRC_DIR/alloc/src/vec.rs:LL:COL + ((*_4).0: alloc::raw_vec::RawVec<u32>) = const alloc::raw_vec::RawVec::<u32> { ptr: Unique::<u32> { pointer: {0x4 as *const u32}, _marker: PhantomData::<u32> }, cap: 0_usize, alloc: std::alloc::Global }; // scope 2 at $SRC_DIR/alloc/src/vec.rs:LL:COL
+ // ty::Const + // ty::Const
@ -27,34 +27,33 @@
- // + span: $DIR/inline-into-box-place.rs:8:33: 8:41 - // + span: $DIR/inline-into-box-place.rs:8:33: 8:41
- // + user_ty: UserType(1) - // + user_ty: UserType(1)
- // + literal: Const { ty: fn() -> std::vec::Vec<u32> {std::vec::Vec::<u32>::new}, val: Value(Scalar(<ZST>)) } - // + literal: Const { ty: fn() -> std::vec::Vec<u32> {std::vec::Vec::<u32>::new}, val: Value(Scalar(<ZST>)) }
- }
-
- bb1: {
+ // + span: $SRC_DIR/alloc/src/vec.rs:LL:COL + // + span: $SRC_DIR/alloc/src/vec.rs:LL:COL
+ // + user_ty: UserType(0) + // + user_ty: UserType(0)
+ // + literal: Const { ty: alloc::raw_vec::RawVec<u32>, val: Value(ByRef { alloc: Allocation { bytes: [4, 0, 0, 0, 0, 0, 0, 0], relocations: Relocations(SortedMap { data: [] }), init_mask: InitMask { blocks: [255], len: Size { raw: 8 } }, size: Size { raw: 8 }, align: Align { pow2: 2 }, mutability: Not, extra: () }, offset: Size { raw: 0 } }) } + // + literal: Const { ty: alloc::raw_vec::RawVec<u32>, val: Value(ByRef { alloc: Allocation { bytes: [4, 0, 0, 0, 0, 0, 0, 0], relocations: Relocations(SortedMap { data: [] }), init_mask: InitMask { blocks: [255], len: Size { raw: 8 } }, size: Size { raw: 8 }, align: Align { pow2: 2 }, mutability: Not, extra: () }, offset: Size { raw: 0 } }) }
+ ((*_4).1: usize) = const 0_usize; // scope 2 at $SRC_DIR/alloc/src/vec.rs:LL:COL + ((*_4).1: usize) = const 0_usize; // scope 2 at $SRC_DIR/alloc/src/vec.rs:LL:COL
+ _1 = move _2; // scope 0 at $DIR/inline-into-box-place.rs:8:29: 8:43 _1 = move _2; // scope 0 at $DIR/inline-into-box-place.rs:8:29: 8:43
+ StorageDead(_2); // scope 0 at $DIR/inline-into-box-place.rs:8:42: 8:43 StorageDead(_2); // scope 0 at $DIR/inline-into-box-place.rs:8:42: 8:43
+ _0 = const (); // scope 0 at $DIR/inline-into-box-place.rs:7:11: 9:2 _0 = const (); // scope 0 at $DIR/inline-into-box-place.rs:7:11: 9:2
+ drop(_1) -> [return: bb2, unwind: bb1]; // scope 0 at $DIR/inline-into-box-place.rs:9:1: 9:2 - drop(_1) -> [return: bb2, unwind: bb3]; // scope 0 at $DIR/inline-into-box-place.rs:9:1: 9:2
+ drop(_1) -> [return: bb1, unwind: bb2]; // scope 0 at $DIR/inline-into-box-place.rs:9:1: 9:2
} }
bb1 (cleanup): { - bb2: {
resume; // scope 0 at $DIR/inline-into-box-place.rs:7:1: 9:2 + bb1: {
}
bb2: {
- _1 = move _2; // scope 0 at $DIR/inline-into-box-place.rs:8:29: 8:43
- StorageDead(_2); // scope 0 at $DIR/inline-into-box-place.rs:8:42: 8:43
- _0 = const (); // scope 0 at $DIR/inline-into-box-place.rs:7:11: 9:2
- drop(_1) -> [return: bb3, unwind: bb1]; // scope 0 at $DIR/inline-into-box-place.rs:9:1: 9:2
- }
-
- bb3: {
StorageDead(_1); // scope 0 at $DIR/inline-into-box-place.rs:9:1: 9:2 StorageDead(_1); // scope 0 at $DIR/inline-into-box-place.rs:9:1: 9:2
return; // scope 0 at $DIR/inline-into-box-place.rs:9:2: 9:2 return; // scope 0 at $DIR/inline-into-box-place.rs:9:2: 9:2
}
- bb3 (cleanup): {
+ bb2 (cleanup): {
resume; // scope 0 at $DIR/inline-into-box-place.rs:7:1: 9:2
- } - }
- -
- bb4 (cleanup): { - bb4 (cleanup): {
- _3 = alloc::alloc::box_free::<Vec<u32>>(move (_2.0: std::ptr::Unique<std::vec::Vec<u32>>)) -> bb1; // scope 0 at $DIR/inline-into-box-place.rs:8:42: 8:43 - _3 = alloc::alloc::box_free::<Vec<u32>>(move (_2.0: std::ptr::Unique<std::vec::Vec<u32>>)) -> bb3; // scope 0 at $DIR/inline-into-box-place.rs:8:42: 8:43
- // mir::Constant - // mir::Constant
- // + span: $DIR/inline-into-box-place.rs:8:42: 8:43 - // + span: $DIR/inline-into-box-place.rs:8:42: 8:43
- // + literal: Const { ty: unsafe fn(std::ptr::Unique<std::vec::Vec<u32>>) {alloc::alloc::box_free::<std::vec::Vec<u32>>}, val: Value(Scalar(<ZST>)) } - // + literal: Const { ty: unsafe fn(std::ptr::Unique<std::vec::Vec<u32>>) {alloc::alloc::box_free::<std::vec::Vec<u32>>}, val: Value(Scalar(<ZST>)) }

View file

@ -17,7 +17,7 @@
StorageLive(_1); // scope 0 at $DIR/inline-into-box-place.rs:8:9: 8:11 StorageLive(_1); // scope 0 at $DIR/inline-into-box-place.rs:8:9: 8:11
StorageLive(_2); // scope 0 at $DIR/inline-into-box-place.rs:8:29: 8:43 StorageLive(_2); // scope 0 at $DIR/inline-into-box-place.rs:8:29: 8:43
_2 = Box(std::vec::Vec<u32>); // scope 0 at $DIR/inline-into-box-place.rs:8:29: 8:43 _2 = Box(std::vec::Vec<u32>); // scope 0 at $DIR/inline-into-box-place.rs:8:29: 8:43
- (*_2) = Vec::<u32>::new() -> [return: bb2, unwind: bb4]; // scope 0 at $DIR/inline-into-box-place.rs:8:33: 8:43 - (*_2) = Vec::<u32>::new() -> [return: bb1, unwind: bb4]; // scope 0 at $DIR/inline-into-box-place.rs:8:33: 8:43
+ _4 = &mut (*_2); // scope 0 at $DIR/inline-into-box-place.rs:8:33: 8:43 + _4 = &mut (*_2); // scope 0 at $DIR/inline-into-box-place.rs:8:33: 8:43
+ ((*_4).0: alloc::raw_vec::RawVec<u32>) = const alloc::raw_vec::RawVec::<u32> { ptr: Unique::<u32> { pointer: {0x4 as *const u32}, _marker: PhantomData::<u32> }, cap: 0_usize, alloc: std::alloc::Global }; // scope 2 at $SRC_DIR/alloc/src/vec.rs:LL:COL + ((*_4).0: alloc::raw_vec::RawVec<u32>) = const alloc::raw_vec::RawVec::<u32> { ptr: Unique::<u32> { pointer: {0x4 as *const u32}, _marker: PhantomData::<u32> }, cap: 0_usize, alloc: std::alloc::Global }; // scope 2 at $SRC_DIR/alloc/src/vec.rs:LL:COL
+ // ty::Const + // ty::Const
@ -27,34 +27,33 @@
- // + span: $DIR/inline-into-box-place.rs:8:33: 8:41 - // + span: $DIR/inline-into-box-place.rs:8:33: 8:41
- // + user_ty: UserType(1) - // + user_ty: UserType(1)
- // + literal: Const { ty: fn() -> std::vec::Vec<u32> {std::vec::Vec::<u32>::new}, val: Value(Scalar(<ZST>)) } - // + literal: Const { ty: fn() -> std::vec::Vec<u32> {std::vec::Vec::<u32>::new}, val: Value(Scalar(<ZST>)) }
- }
-
- bb1: {
+ // + span: $SRC_DIR/alloc/src/vec.rs:LL:COL + // + span: $SRC_DIR/alloc/src/vec.rs:LL:COL
+ // + user_ty: UserType(0) + // + user_ty: UserType(0)
+ // + literal: Const { ty: alloc::raw_vec::RawVec<u32>, val: Value(ByRef { alloc: Allocation { bytes: [4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], relocations: Relocations(SortedMap { data: [] }), init_mask: InitMask { blocks: [65535], len: Size { raw: 16 } }, size: Size { raw: 16 }, align: Align { pow2: 3 }, mutability: Not, extra: () }, offset: Size { raw: 0 } }) } + // + literal: Const { ty: alloc::raw_vec::RawVec<u32>, val: Value(ByRef { alloc: Allocation { bytes: [4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], relocations: Relocations(SortedMap { data: [] }), init_mask: InitMask { blocks: [65535], len: Size { raw: 16 } }, size: Size { raw: 16 }, align: Align { pow2: 3 }, mutability: Not, extra: () }, offset: Size { raw: 0 } }) }
+ ((*_4).1: usize) = const 0_usize; // scope 2 at $SRC_DIR/alloc/src/vec.rs:LL:COL + ((*_4).1: usize) = const 0_usize; // scope 2 at $SRC_DIR/alloc/src/vec.rs:LL:COL
+ _1 = move _2; // scope 0 at $DIR/inline-into-box-place.rs:8:29: 8:43 _1 = move _2; // scope 0 at $DIR/inline-into-box-place.rs:8:29: 8:43
+ StorageDead(_2); // scope 0 at $DIR/inline-into-box-place.rs:8:42: 8:43 StorageDead(_2); // scope 0 at $DIR/inline-into-box-place.rs:8:42: 8:43
+ _0 = const (); // scope 0 at $DIR/inline-into-box-place.rs:7:11: 9:2 _0 = const (); // scope 0 at $DIR/inline-into-box-place.rs:7:11: 9:2
+ drop(_1) -> [return: bb2, unwind: bb1]; // scope 0 at $DIR/inline-into-box-place.rs:9:1: 9:2 - drop(_1) -> [return: bb2, unwind: bb3]; // scope 0 at $DIR/inline-into-box-place.rs:9:1: 9:2
+ drop(_1) -> [return: bb1, unwind: bb2]; // scope 0 at $DIR/inline-into-box-place.rs:9:1: 9:2
} }
bb1 (cleanup): { - bb2: {
resume; // scope 0 at $DIR/inline-into-box-place.rs:7:1: 9:2 + bb1: {
}
bb2: {
- _1 = move _2; // scope 0 at $DIR/inline-into-box-place.rs:8:29: 8:43
- StorageDead(_2); // scope 0 at $DIR/inline-into-box-place.rs:8:42: 8:43
- _0 = const (); // scope 0 at $DIR/inline-into-box-place.rs:7:11: 9:2
- drop(_1) -> [return: bb3, unwind: bb1]; // scope 0 at $DIR/inline-into-box-place.rs:9:1: 9:2
- }
-
- bb3: {
StorageDead(_1); // scope 0 at $DIR/inline-into-box-place.rs:9:1: 9:2 StorageDead(_1); // scope 0 at $DIR/inline-into-box-place.rs:9:1: 9:2
return; // scope 0 at $DIR/inline-into-box-place.rs:9:2: 9:2 return; // scope 0 at $DIR/inline-into-box-place.rs:9:2: 9:2
}
- bb3 (cleanup): {
+ bb2 (cleanup): {
resume; // scope 0 at $DIR/inline-into-box-place.rs:7:1: 9:2
- } - }
- -
- bb4 (cleanup): { - bb4 (cleanup): {
- _3 = alloc::alloc::box_free::<Vec<u32>>(move (_2.0: std::ptr::Unique<std::vec::Vec<u32>>)) -> bb1; // scope 0 at $DIR/inline-into-box-place.rs:8:42: 8:43 - _3 = alloc::alloc::box_free::<Vec<u32>>(move (_2.0: std::ptr::Unique<std::vec::Vec<u32>>)) -> bb3; // scope 0 at $DIR/inline-into-box-place.rs:8:42: 8:43
- // mir::Constant - // mir::Constant
- // + span: $DIR/inline-into-box-place.rs:8:42: 8:43 - // + span: $DIR/inline-into-box-place.rs:8:42: 8:43
- // + literal: Const { ty: unsafe fn(std::ptr::Unique<std::vec::Vec<u32>>) {alloc::alloc::box_free::<std::vec::Vec<u32>>}, val: Value(Scalar(<ZST>)) } - // + literal: Const { ty: unsafe fn(std::ptr::Unique<std::vec::Vec<u32>>) {alloc::alloc::box_free::<std::vec::Vec<u32>>}, val: Value(Scalar(<ZST>)) }

View file

@ -9,40 +9,40 @@
bb0: { bb0: {
+ Coverage::Counter(0) for /the/src/instrument_coverage.rs:10:11 - 16:2; // scope 0 at /the/src/instrument_coverage.rs:11:5: 15:6 + Coverage::Counter(0) for /the/src/instrument_coverage.rs:10:11 - 16:2; // scope 0 at /the/src/instrument_coverage.rs:11:5: 15:6
falseUnwind -> [real: bb1, cleanup: bb2]; // scope 0 at /the/src/instrument_coverage.rs:11:5: 15:6 falseUnwind -> [real: bb1, cleanup: bb6]; // scope 0 at /the/src/instrument_coverage.rs:11:5: 15:6
} }
bb1: { bb1: {
StorageLive(_2); // scope 0 at /the/src/instrument_coverage.rs:12:12: 12:17 StorageLive(_2); // scope 0 at /the/src/instrument_coverage.rs:12:12: 12:17
_2 = bar() -> [return: bb3, unwind: bb2]; // scope 0 at /the/src/instrument_coverage.rs:12:12: 12:17 _2 = bar() -> [return: bb2, unwind: bb6]; // scope 0 at /the/src/instrument_coverage.rs:12:12: 12:17
// mir::Constant // mir::Constant
// + span: /the/src/instrument_coverage.rs:12:12: 12:15 // + span: /the/src/instrument_coverage.rs:12:12: 12:15
// + literal: Const { ty: fn() -> bool {bar}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn() -> bool {bar}, val: Value(Scalar(<ZST>)) }
} }
bb2 (cleanup): { bb2: {
resume; // scope 0 at /the/src/instrument_coverage.rs:10:1: 16:2 FakeRead(ForMatchedPlace, _2); // scope 0 at /the/src/instrument_coverage.rs:12:12: 12:17
switchInt(_2) -> [false: bb4, otherwise: bb3]; // scope 0 at /the/src/instrument_coverage.rs:12:9: 14:10
} }
bb3: { bb3: {
FakeRead(ForMatchedPlace, _2); // scope 0 at /the/src/instrument_coverage.rs:12:12: 12:17 falseEdge -> [real: bb5, imaginary: bb4]; // scope 0 at /the/src/instrument_coverage.rs:12:9: 14:10
switchInt(_2) -> [false: bb5, otherwise: bb4]; // scope 0 at /the/src/instrument_coverage.rs:12:9: 14:10
} }
bb4: { bb4: {
falseEdge -> [real: bb6, imaginary: bb5]; // scope 0 at /the/src/instrument_coverage.rs:12:9: 14:10
}
bb5: {
_1 = const (); // scope 0 at /the/src/instrument_coverage.rs:12:9: 14:10 _1 = const (); // scope 0 at /the/src/instrument_coverage.rs:12:9: 14:10
StorageDead(_2); // scope 0 at /the/src/instrument_coverage.rs:15:5: 15:6 StorageDead(_2); // scope 0 at /the/src/instrument_coverage.rs:15:5: 15:6
goto -> bb0; // scope 0 at /the/src/instrument_coverage.rs:11:5: 15:6 goto -> bb0; // scope 0 at /the/src/instrument_coverage.rs:11:5: 15:6
} }
bb6: { bb5: {
_0 = const (); // scope 0 at /the/src/instrument_coverage.rs:13:13: 13:18 _0 = const (); // scope 0 at /the/src/instrument_coverage.rs:13:13: 13:18
StorageDead(_2); // scope 0 at /the/src/instrument_coverage.rs:15:5: 15:6 StorageDead(_2); // scope 0 at /the/src/instrument_coverage.rs:15:5: 15:6
return; // scope 0 at /the/src/instrument_coverage.rs:16:2: 16:2 return; // scope 0 at /the/src/instrument_coverage.rs:16:2: 16:2
} }
bb6 (cleanup): {
resume; // scope 0 at /the/src/instrument_coverage.rs:10:1: 16:2
}
} }

View file

@ -15,43 +15,43 @@ fn main() -> () {
StorageLive(_1); // scope 0 at $DIR/issue-38669.rs:5:9: 5:25 StorageLive(_1); // scope 0 at $DIR/issue-38669.rs:5:9: 5:25
_1 = const false; // scope 0 at $DIR/issue-38669.rs:5:28: 5:33 _1 = const false; // scope 0 at $DIR/issue-38669.rs:5:28: 5:33
FakeRead(ForLet, _1); // scope 0 at $DIR/issue-38669.rs:5:9: 5:25 FakeRead(ForLet, _1); // scope 0 at $DIR/issue-38669.rs:5:9: 5:25
goto -> bb2; // scope 1 at $DIR/issue-38669.rs:6:5: 11:6 goto -> bb1; // scope 1 at $DIR/issue-38669.rs:6:5: 11:6
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/issue-38669.rs:4:1: 12:2 falseUnwind -> [real: bb2, cleanup: bb6]; // scope 1 at $DIR/issue-38669.rs:6:5: 11:6
} }
bb2: { bb2: {
falseUnwind -> [real: bb3, cleanup: bb1]; // scope 1 at $DIR/issue-38669.rs:6:5: 11:6
}
bb3: {
StorageLive(_3); // scope 1 at $DIR/issue-38669.rs:7:9: 9:10 StorageLive(_3); // scope 1 at $DIR/issue-38669.rs:7:9: 9:10
StorageLive(_4); // scope 1 at $DIR/issue-38669.rs:7:12: 7:24 StorageLive(_4); // scope 1 at $DIR/issue-38669.rs:7:12: 7:24
_4 = _1; // scope 1 at $DIR/issue-38669.rs:7:12: 7:24 _4 = _1; // scope 1 at $DIR/issue-38669.rs:7:12: 7:24
FakeRead(ForMatchedPlace, _4); // scope 1 at $DIR/issue-38669.rs:7:12: 7:24 FakeRead(ForMatchedPlace, _4); // scope 1 at $DIR/issue-38669.rs:7:12: 7:24
switchInt(_4) -> [false: bb5, otherwise: bb4]; // scope 1 at $DIR/issue-38669.rs:7:9: 9:10 switchInt(_4) -> [false: bb4, otherwise: bb3]; // scope 1 at $DIR/issue-38669.rs:7:9: 9:10
}
bb3: {
falseEdge -> [real: bb5, imaginary: bb4]; // scope 1 at $DIR/issue-38669.rs:7:9: 9:10
} }
bb4: { bb4: {
falseEdge -> [real: bb6, imaginary: bb5]; // scope 1 at $DIR/issue-38669.rs:7:9: 9:10
}
bb5: {
_3 = const (); // scope 1 at $DIR/issue-38669.rs:7:9: 9:10 _3 = const (); // scope 1 at $DIR/issue-38669.rs:7:9: 9:10
StorageDead(_4); // scope 1 at $DIR/issue-38669.rs:9:9: 9:10 StorageDead(_4); // scope 1 at $DIR/issue-38669.rs:9:9: 9:10
StorageDead(_3); // scope 1 at $DIR/issue-38669.rs:9:9: 9:10 StorageDead(_3); // scope 1 at $DIR/issue-38669.rs:9:9: 9:10
_1 = const true; // scope 1 at $DIR/issue-38669.rs:10:9: 10:28 _1 = const true; // scope 1 at $DIR/issue-38669.rs:10:9: 10:28
_2 = const (); // scope 1 at $DIR/issue-38669.rs:6:10: 11:6 _2 = const (); // scope 1 at $DIR/issue-38669.rs:6:10: 11:6
goto -> bb2; // scope 1 at $DIR/issue-38669.rs:6:5: 11:6 goto -> bb1; // scope 1 at $DIR/issue-38669.rs:6:5: 11:6
} }
bb6: { bb5: {
_0 = const (); // scope 1 at $DIR/issue-38669.rs:8:13: 8:18 _0 = const (); // scope 1 at $DIR/issue-38669.rs:8:13: 8:18
StorageDead(_4); // scope 1 at $DIR/issue-38669.rs:9:9: 9:10 StorageDead(_4); // scope 1 at $DIR/issue-38669.rs:9:9: 9:10
StorageDead(_3); // scope 1 at $DIR/issue-38669.rs:9:9: 9:10 StorageDead(_3); // scope 1 at $DIR/issue-38669.rs:9:9: 9:10
StorageDead(_1); // scope 0 at $DIR/issue-38669.rs:12:1: 12:2 StorageDead(_1); // scope 0 at $DIR/issue-38669.rs:12:1: 12:2
return; // scope 0 at $DIR/issue-38669.rs:12:2: 12:2 return; // scope 0 at $DIR/issue-38669.rs:12:2: 12:2
} }
bb6 (cleanup): {
resume; // scope 0 at $DIR/issue-38669.rs:4:1: 12:2
}
} }

View file

@ -20,38 +20,22 @@ fn main() -> () {
StorageLive(_3); // scope 0 at $DIR/issue-41110.rs:8:21: 8:27 StorageLive(_3); // scope 0 at $DIR/issue-41110.rs:8:21: 8:27
StorageLive(_4); // scope 0 at $DIR/issue-41110.rs:8:21: 8:22 StorageLive(_4); // scope 0 at $DIR/issue-41110.rs:8:21: 8:22
_4 = S; // scope 0 at $DIR/issue-41110.rs:8:21: 8:22 _4 = S; // scope 0 at $DIR/issue-41110.rs:8:21: 8:22
_3 = S::id(move _4) -> [return: bb2, unwind: bb4]; // scope 0 at $DIR/issue-41110.rs:8:21: 8:27 _3 = S::id(move _4) -> [return: bb1, unwind: bb4]; // scope 0 at $DIR/issue-41110.rs:8:21: 8:27
// mir::Constant // mir::Constant
// + span: $DIR/issue-41110.rs:8:23: 8:25 // + span: $DIR/issue-41110.rs:8:23: 8:25
// + literal: Const { ty: fn(S) -> S {S::id}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn(S) -> S {S::id}, val: Value(Scalar(<ZST>)) }
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/issue-41110.rs:7:1: 9:2
}
bb2: {
StorageDead(_4); // scope 0 at $DIR/issue-41110.rs:8:26: 8:27 StorageDead(_4); // scope 0 at $DIR/issue-41110.rs:8:26: 8:27
_5 = const false; // scope 0 at $DIR/issue-41110.rs:8:13: 8:28 _5 = const false; // scope 0 at $DIR/issue-41110.rs:8:13: 8:28
_1 = S::other(move _2, move _3) -> [return: bb6, unwind: bb5]; // scope 0 at $DIR/issue-41110.rs:8:13: 8:28 _1 = S::other(move _2, move _3) -> [return: bb2, unwind: bb3]; // scope 0 at $DIR/issue-41110.rs:8:13: 8:28
// mir::Constant // mir::Constant
// + span: $DIR/issue-41110.rs:8:15: 8:20 // + span: $DIR/issue-41110.rs:8:15: 8:20
// + literal: Const { ty: fn(S, S) {S::other}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn(S, S) {S::other}, val: Value(Scalar(<ZST>)) }
} }
bb3 (cleanup): { bb2: {
goto -> bb9; // scope 0 at $DIR/issue-41110.rs:8:27: 8:28
}
bb4 (cleanup): {
goto -> bb3; // scope 0 at $DIR/issue-41110.rs:8:26: 8:27
}
bb5 (cleanup): {
goto -> bb3; // scope 0 at $DIR/issue-41110.rs:8:27: 8:28
}
bb6: {
StorageDead(_3); // scope 0 at $DIR/issue-41110.rs:8:27: 8:28 StorageDead(_3); // scope 0 at $DIR/issue-41110.rs:8:27: 8:28
_5 = const false; // scope 0 at $DIR/issue-41110.rs:8:27: 8:28 _5 = const false; // scope 0 at $DIR/issue-41110.rs:8:27: 8:28
StorageDead(_2); // scope 0 at $DIR/issue-41110.rs:8:27: 8:28 StorageDead(_2); // scope 0 at $DIR/issue-41110.rs:8:27: 8:28
@ -60,16 +44,27 @@ fn main() -> () {
return; // scope 0 at $DIR/issue-41110.rs:9:2: 9:2 return; // scope 0 at $DIR/issue-41110.rs:9:2: 9:2
} }
bb3 (cleanup): {
goto -> bb5; // scope 0 at $DIR/issue-41110.rs:8:27: 8:28
}
bb4 (cleanup): {
goto -> bb5; // scope 0 at $DIR/issue-41110.rs:8:26: 8:27
}
bb5 (cleanup): {
goto -> bb8; // scope 0 at $DIR/issue-41110.rs:8:27: 8:28
}
bb6 (cleanup): {
resume; // scope 0 at $DIR/issue-41110.rs:7:1: 9:2
}
bb7 (cleanup): { bb7 (cleanup): {
drop(_2) -> bb1; // scope 0 at $DIR/issue-41110.rs:8:27: 8:28 drop(_2) -> bb6; // scope 0 at $DIR/issue-41110.rs:8:27: 8:28
} }
bb8 (cleanup): { bb8 (cleanup): {
_5 = const false; // scope 0 at $DIR/issue-41110.rs:8:27: 8:28 switchInt(_5) -> [false: bb6, otherwise: bb7]; // scope 0 at $DIR/issue-41110.rs:8:27: 8:28
goto -> bb7; // scope 0 at $DIR/issue-41110.rs:8:27: 8:28
}
bb9 (cleanup): {
switchInt(_5) -> [false: bb1, otherwise: bb8]; // scope 0 at $DIR/issue-41110.rs:8:27: 8:28
} }
} }

View file

@ -25,17 +25,13 @@ fn test() -> () {
StorageLive(_3); // scope 2 at $DIR/issue-41110.rs:17:5: 17:12 StorageLive(_3); // scope 2 at $DIR/issue-41110.rs:17:5: 17:12
StorageLive(_4); // scope 2 at $DIR/issue-41110.rs:17:10: 17:11 StorageLive(_4); // scope 2 at $DIR/issue-41110.rs:17:10: 17:11
_4 = move _2; // scope 2 at $DIR/issue-41110.rs:17:10: 17:11 _4 = move _2; // scope 2 at $DIR/issue-41110.rs:17:10: 17:11
_3 = std::mem::drop::<S>(move _4) -> [return: bb2, unwind: bb5]; // scope 2 at $DIR/issue-41110.rs:17:5: 17:12 _3 = std::mem::drop::<S>(move _4) -> [return: bb1, unwind: bb7]; // scope 2 at $DIR/issue-41110.rs:17:5: 17:12
// mir::Constant // mir::Constant
// + span: $DIR/issue-41110.rs:17:5: 17:9 // + span: $DIR/issue-41110.rs:17:5: 17:9
// + literal: Const { ty: fn(S) {std::mem::drop::<S>}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn(S) {std::mem::drop::<S>}, val: Value(Scalar(<ZST>)) }
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/issue-41110.rs:14:1: 19:2
}
bb2: {
StorageDead(_4); // scope 2 at $DIR/issue-41110.rs:17:11: 17:12 StorageDead(_4); // scope 2 at $DIR/issue-41110.rs:17:11: 17:12
StorageDead(_3); // scope 2 at $DIR/issue-41110.rs:17:12: 17:13 StorageDead(_3); // scope 2 at $DIR/issue-41110.rs:17:12: 17:13
StorageLive(_5); // scope 2 at $DIR/issue-41110.rs:18:9: 18:10 StorageLive(_5); // scope 2 at $DIR/issue-41110.rs:18:9: 18:10
@ -44,63 +40,62 @@ fn test() -> () {
goto -> bb12; // scope 2 at $DIR/issue-41110.rs:18:5: 18:6 goto -> bb12; // scope 2 at $DIR/issue-41110.rs:18:5: 18:6
} }
bb3 (cleanup): { bb2: {
goto -> bb15; // scope 0 at $DIR/issue-41110.rs:19:1: 19:2 goto -> bb3; // scope 2 at $DIR/issue-41110.rs:18:9: 18:10
} }
bb4 (cleanup): { bb3: {
goto -> bb3; // scope 1 at $DIR/issue-41110.rs:19:1: 19:2
}
bb5 (cleanup): {
goto -> bb4; // scope 2 at $DIR/issue-41110.rs:17:11: 17:12
}
bb6: {
goto -> bb8; // scope 2 at $DIR/issue-41110.rs:18:9: 18:10
}
bb7 (cleanup): {
goto -> bb4; // scope 2 at $DIR/issue-41110.rs:18:9: 18:10
}
bb8: {
StorageDead(_5); // scope 2 at $DIR/issue-41110.rs:18:9: 18:10 StorageDead(_5); // scope 2 at $DIR/issue-41110.rs:18:9: 18:10
_0 = const (); // scope 0 at $DIR/issue-41110.rs:14:15: 19:2 _0 = const (); // scope 0 at $DIR/issue-41110.rs:14:15: 19:2
drop(_2) -> [return: bb9, unwind: bb3]; // scope 1 at $DIR/issue-41110.rs:19:1: 19:2 drop(_2) -> [return: bb4, unwind: bb9]; // scope 1 at $DIR/issue-41110.rs:19:1: 19:2
} }
bb9: { bb4: {
StorageDead(_2); // scope 1 at $DIR/issue-41110.rs:19:1: 19:2 StorageDead(_2); // scope 1 at $DIR/issue-41110.rs:19:1: 19:2
goto -> bb10; // scope 0 at $DIR/issue-41110.rs:19:1: 19:2 goto -> bb5; // scope 0 at $DIR/issue-41110.rs:19:1: 19:2
} }
bb10: { bb5: {
_6 = const false; // scope 0 at $DIR/issue-41110.rs:19:1: 19:2 _6 = const false; // scope 0 at $DIR/issue-41110.rs:19:1: 19:2
StorageDead(_1); // scope 0 at $DIR/issue-41110.rs:19:1: 19:2 StorageDead(_1); // scope 0 at $DIR/issue-41110.rs:19:1: 19:2
return; // scope 0 at $DIR/issue-41110.rs:19:2: 19:2 return; // scope 0 at $DIR/issue-41110.rs:19:2: 19:2
} }
bb11 (cleanup): { bb6 (cleanup): {
_2 = move _5; // scope 2 at $DIR/issue-41110.rs:18:5: 18:6 goto -> bb8; // scope 2 at $DIR/issue-41110.rs:18:9: 18:10
goto -> bb7; // scope 2 at $DIR/issue-41110.rs:18:5: 18:6
} }
bb12: { bb7 (cleanup): {
goto -> bb8; // scope 2 at $DIR/issue-41110.rs:17:11: 17:12
}
bb8 (cleanup): {
goto -> bb9; // scope 1 at $DIR/issue-41110.rs:19:1: 19:2
}
bb9 (cleanup): {
goto -> bb14; // scope 0 at $DIR/issue-41110.rs:19:1: 19:2
}
bb10 (cleanup): {
resume; // scope 0 at $DIR/issue-41110.rs:14:1: 19:2
}
bb11 (cleanup): {
_2 = move _5; // scope 2 at $DIR/issue-41110.rs:18:5: 18:6 _2 = move _5; // scope 2 at $DIR/issue-41110.rs:18:5: 18:6
goto -> bb6; // scope 2 at $DIR/issue-41110.rs:18:5: 18:6 goto -> bb6; // scope 2 at $DIR/issue-41110.rs:18:5: 18:6
} }
bb12: {
_2 = move _5; // scope 2 at $DIR/issue-41110.rs:18:5: 18:6
goto -> bb2; // scope 2 at $DIR/issue-41110.rs:18:5: 18:6
}
bb13 (cleanup): { bb13 (cleanup): {
drop(_1) -> bb1; // scope 0 at $DIR/issue-41110.rs:19:1: 19:2 drop(_1) -> bb10; // scope 0 at $DIR/issue-41110.rs:19:1: 19:2
} }
bb14 (cleanup): { bb14 (cleanup): {
_6 = const false; // scope 0 at $DIR/issue-41110.rs:19:1: 19:2 switchInt(_6) -> [false: bb10, otherwise: bb13]; // scope 0 at $DIR/issue-41110.rs:19:1: 19:2
goto -> bb13; // scope 0 at $DIR/issue-41110.rs:19:1: 19:2
}
bb15 (cleanup): {
switchInt(_6) -> [false: bb1, otherwise: bb14]; // scope 0 at $DIR/issue-41110.rs:19:1: 19:2
} }
} }

View file

@ -6,15 +6,15 @@
bb0: { bb0: {
_1 = CheckedAdd(const 1_usize, const 1_usize); // scope 0 at $DIR/issue-41697.rs:18:19: 18:22 _1 = CheckedAdd(const 1_usize, const 1_usize); // scope 0 at $DIR/issue-41697.rs:18:19: 18:22
assert(!move (_1.1: bool), "attempt to compute `{} + {}`, which would overflow", const 1_usize, const 1_usize) -> [success: bb2, unwind: bb1]; // scope 0 at $DIR/issue-41697.rs:18:19: 18:22 assert(!move (_1.1: bool), "attempt to compute `{} + {}`, which would overflow", const 1_usize, const 1_usize) -> [success: bb1, unwind: bb2]; // scope 0 at $DIR/issue-41697.rs:18:19: 18:22
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/issue-41697.rs:18:19: 18:22
}
bb2: {
_0 = move (_1.0: usize); // scope 0 at $DIR/issue-41697.rs:18:19: 18:22 _0 = move (_1.0: usize); // scope 0 at $DIR/issue-41697.rs:18:19: 18:22
return; // scope 0 at $DIR/issue-41697.rs:18:19: 18:22 return; // scope 0 at $DIR/issue-41697.rs:18:19: 18:22
} }
bb2 (cleanup): {
resume; // scope 0 at $DIR/issue-41697.rs:18:19: 18:22
}
} }

View file

@ -6,15 +6,15 @@
bb0: { bb0: {
_1 = CheckedAdd(const 1_usize, const 1_usize); // scope 0 at $DIR/issue-41697.rs:18:19: 18:22 _1 = CheckedAdd(const 1_usize, const 1_usize); // scope 0 at $DIR/issue-41697.rs:18:19: 18:22
assert(!move (_1.1: bool), "attempt to compute `{} + {}`, which would overflow", const 1_usize, const 1_usize) -> [success: bb2, unwind: bb1]; // scope 0 at $DIR/issue-41697.rs:18:19: 18:22 assert(!move (_1.1: bool), "attempt to compute `{} + {}`, which would overflow", const 1_usize, const 1_usize) -> [success: bb1, unwind: bb2]; // scope 0 at $DIR/issue-41697.rs:18:19: 18:22
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/issue-41697.rs:18:19: 18:22
}
bb2: {
_0 = move (_1.0: usize); // scope 0 at $DIR/issue-41697.rs:18:19: 18:22 _0 = move (_1.0: usize); // scope 0 at $DIR/issue-41697.rs:18:19: 18:22
return; // scope 0 at $DIR/issue-41697.rs:18:19: 18:22 return; // scope 0 at $DIR/issue-41697.rs:18:19: 18:22
} }
bb2 (cleanup): {
resume; // scope 0 at $DIR/issue-41697.rs:18:19: 18:22
}
} }

View file

@ -26,30 +26,22 @@ fn main() -> () {
_8 = const false; // scope 0 at $DIR/issue-41888.rs:7:9: 7:10 _8 = const false; // scope 0 at $DIR/issue-41888.rs:7:9: 7:10
StorageLive(_1); // scope 0 at $DIR/issue-41888.rs:7:9: 7:10 StorageLive(_1); // scope 0 at $DIR/issue-41888.rs:7:9: 7:10
StorageLive(_2); // scope 1 at $DIR/issue-41888.rs:8:8: 8:14 StorageLive(_2); // scope 1 at $DIR/issue-41888.rs:8:8: 8:14
_2 = cond() -> [return: bb2, unwind: bb3]; // scope 1 at $DIR/issue-41888.rs:8:8: 8:14 _2 = cond() -> [return: bb1, unwind: bb11]; // scope 1 at $DIR/issue-41888.rs:8:8: 8:14
// mir::Constant // mir::Constant
// + span: $DIR/issue-41888.rs:8:8: 8:12 // + span: $DIR/issue-41888.rs:8:8: 8:12
// + literal: Const { ty: fn() -> bool {cond}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn() -> bool {cond}, val: Value(Scalar(<ZST>)) }
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/issue-41888.rs:6:1: 15:2 switchInt(_2) -> [false: bb2, otherwise: bb3]; // scope 1 at $DIR/issue-41888.rs:8:5: 14:6
} }
bb2: { bb2: {
switchInt(_2) -> [false: bb4, otherwise: bb5]; // scope 1 at $DIR/issue-41888.rs:8:5: 14:6
}
bb3 (cleanup): {
goto -> bb1; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2
}
bb4: {
_0 = const (); // scope 1 at $DIR/issue-41888.rs:8:5: 14:6 _0 = const (); // scope 1 at $DIR/issue-41888.rs:8:5: 14:6
goto -> bb11; // scope 1 at $DIR/issue-41888.rs:8:5: 14:6 goto -> bb8; // scope 1 at $DIR/issue-41888.rs:8:5: 14:6
} }
bb5: { bb3: {
StorageLive(_3); // scope 1 at $DIR/issue-41888.rs:9:13: 9:20 StorageLive(_3); // scope 1 at $DIR/issue-41888.rs:9:13: 9:20
StorageLive(_4); // scope 1 at $DIR/issue-41888.rs:9:18: 9:19 StorageLive(_4); // scope 1 at $DIR/issue-41888.rs:9:18: 9:19
_4 = K; // scope 1 at $DIR/issue-41888.rs:9:18: 9:19 _4 = K; // scope 1 at $DIR/issue-41888.rs:9:18: 9:19
@ -58,39 +50,35 @@ fn main() -> () {
goto -> bb14; // scope 1 at $DIR/issue-41888.rs:9:9: 9:10 goto -> bb14; // scope 1 at $DIR/issue-41888.rs:9:9: 9:10
} }
bb6: { bb4: {
goto -> bb8; // scope 1 at $DIR/issue-41888.rs:9:19: 9:20 goto -> bb5; // scope 1 at $DIR/issue-41888.rs:9:19: 9:20
} }
bb7 (cleanup): { bb5: {
goto -> bb3; // scope 1 at $DIR/issue-41888.rs:9:19: 9:20
}
bb8: {
StorageDead(_3); // scope 1 at $DIR/issue-41888.rs:9:19: 9:20 StorageDead(_3); // scope 1 at $DIR/issue-41888.rs:9:19: 9:20
_5 = discriminant(_1); // scope 1 at $DIR/issue-41888.rs:10:16: 10:24 _5 = discriminant(_1); // scope 1 at $DIR/issue-41888.rs:10:16: 10:24
switchInt(move _5) -> [0_isize: bb10, otherwise: bb9]; // scope 1 at $DIR/issue-41888.rs:10:16: 10:24 switchInt(move _5) -> [0_isize: bb7, otherwise: bb6]; // scope 1 at $DIR/issue-41888.rs:10:16: 10:24
} }
bb9: { bb6: {
_0 = const (); // scope 1 at $DIR/issue-41888.rs:10:9: 13:10 _0 = const (); // scope 1 at $DIR/issue-41888.rs:10:9: 13:10
goto -> bb11; // scope 1 at $DIR/issue-41888.rs:10:9: 13:10 goto -> bb8; // scope 1 at $DIR/issue-41888.rs:10:9: 13:10
} }
bb10: { bb7: {
StorageLive(_6); // scope 1 at $DIR/issue-41888.rs:10:21: 10:23 StorageLive(_6); // scope 1 at $DIR/issue-41888.rs:10:21: 10:23
_9 = const false; // scope 1 at $DIR/issue-41888.rs:10:21: 10:23 _9 = const false; // scope 1 at $DIR/issue-41888.rs:10:21: 10:23
_6 = move ((_1 as F).0: K); // scope 1 at $DIR/issue-41888.rs:10:21: 10:23 _6 = move ((_1 as F).0: K); // scope 1 at $DIR/issue-41888.rs:10:21: 10:23
_0 = const (); // scope 2 at $DIR/issue-41888.rs:10:29: 13:10 _0 = const (); // scope 2 at $DIR/issue-41888.rs:10:29: 13:10
StorageDead(_6); // scope 1 at $DIR/issue-41888.rs:13:9: 13:10 StorageDead(_6); // scope 1 at $DIR/issue-41888.rs:13:9: 13:10
goto -> bb11; // scope 1 at $DIR/issue-41888.rs:10:9: 13:10 goto -> bb8; // scope 1 at $DIR/issue-41888.rs:10:9: 13:10
} }
bb11: { bb8: {
goto -> bb21; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2 goto -> bb20; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2
} }
bb12: { bb9: {
_7 = const false; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2 _7 = const false; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2
_8 = const false; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2 _8 = const false; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2
_9 = const false; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2 _9 = const false; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2
@ -99,12 +87,24 @@ fn main() -> () {
return; // scope 0 at $DIR/issue-41888.rs:15:2: 15:2 return; // scope 0 at $DIR/issue-41888.rs:15:2: 15:2
} }
bb10 (cleanup): {
goto -> bb11; // scope 1 at $DIR/issue-41888.rs:9:19: 9:20
}
bb11 (cleanup): {
goto -> bb12; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2
}
bb12 (cleanup): {
resume; // scope 0 at $DIR/issue-41888.rs:6:1: 15:2
}
bb13 (cleanup): { bb13 (cleanup): {
_7 = const true; // scope 1 at $DIR/issue-41888.rs:9:9: 9:10 _7 = const true; // scope 1 at $DIR/issue-41888.rs:9:9: 9:10
_8 = const true; // scope 1 at $DIR/issue-41888.rs:9:9: 9:10 _8 = const true; // scope 1 at $DIR/issue-41888.rs:9:9: 9:10
_9 = const true; // scope 1 at $DIR/issue-41888.rs:9:9: 9:10 _9 = const true; // scope 1 at $DIR/issue-41888.rs:9:9: 9:10
_1 = move _3; // scope 1 at $DIR/issue-41888.rs:9:9: 9:10 _1 = move _3; // scope 1 at $DIR/issue-41888.rs:9:9: 9:10
goto -> bb7; // scope 1 at $DIR/issue-41888.rs:9:9: 9:10 goto -> bb10; // scope 1 at $DIR/issue-41888.rs:9:9: 9:10
} }
bb14: { bb14: {
@ -112,46 +112,41 @@ fn main() -> () {
_8 = const true; // scope 1 at $DIR/issue-41888.rs:9:9: 9:10 _8 = const true; // scope 1 at $DIR/issue-41888.rs:9:9: 9:10
_9 = const true; // scope 1 at $DIR/issue-41888.rs:9:9: 9:10 _9 = const true; // scope 1 at $DIR/issue-41888.rs:9:9: 9:10
_1 = move _3; // scope 1 at $DIR/issue-41888.rs:9:9: 9:10 _1 = move _3; // scope 1 at $DIR/issue-41888.rs:9:9: 9:10
goto -> bb6; // scope 1 at $DIR/issue-41888.rs:9:9: 9:10 goto -> bb4; // scope 1 at $DIR/issue-41888.rs:9:9: 9:10
} }
bb15: { bb15: {
_7 = const false; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2 _7 = const false; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2
goto -> bb12; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2 goto -> bb9; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2
} }
bb16 (cleanup): { bb16 (cleanup): {
_7 = const false; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2 goto -> bb12; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2
goto -> bb1; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2
} }
bb17 (cleanup): { bb17: {
goto -> bb16; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2 drop(_1) -> [return: bb15, unwind: bb12]; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2
} }
bb18: { bb18 (cleanup): {
drop(_1) -> [return: bb15, unwind: bb16]; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2 drop(_1) -> bb12; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2
} }
bb19 (cleanup): { bb19: {
drop(_1) -> bb16; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2 _10 = discriminant(_1); // scope 0 at $DIR/issue-41888.rs:15:1: 15:2
switchInt(move _10) -> [0_isize: bb15, otherwise: bb17]; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2
} }
bb20: { bb20: {
_10 = discriminant(_1); // scope 0 at $DIR/issue-41888.rs:15:1: 15:2 switchInt(_7) -> [false: bb15, otherwise: bb19]; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2
switchInt(move _10) -> [0_isize: bb15, otherwise: bb18]; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2
} }
bb21: { bb21 (cleanup): {
switchInt(_7) -> [false: bb15, otherwise: bb20]; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2 _11 = discriminant(_1); // scope 0 at $DIR/issue-41888.rs:15:1: 15:2
switchInt(move _11) -> [0_isize: bb16, otherwise: bb18]; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2
} }
bb22 (cleanup): { bb22 (cleanup): {
_11 = discriminant(_1); // scope 0 at $DIR/issue-41888.rs:15:1: 15:2 switchInt(_7) -> [false: bb12, otherwise: bb21]; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2
switchInt(move _11) -> [0_isize: bb17, otherwise: bb19]; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2
}
bb23 (cleanup): {
switchInt(_7) -> [false: bb16, otherwise: bb22]; // scope 0 at $DIR/issue-41888.rs:15:1: 15:2
} }
} }

View file

@ -17,70 +17,52 @@ fn main() -> () {
} }
bb1: { bb1: {
falseUnwind -> [real: bb3, cleanup: bb4]; // scope 0 at $DIR/issue-49232.rs:6:5: 14:6 falseUnwind -> [real: bb2, cleanup: bb11]; // scope 0 at $DIR/issue-49232.rs:6:5: 14:6
} }
bb2: { bb2: {
goto -> bb14; // scope 0 at $DIR/issue-49232.rs:15:2: 15:2
}
bb3: {
StorageLive(_2); // scope 0 at $DIR/issue-49232.rs:7:13: 7:19 StorageLive(_2); // scope 0 at $DIR/issue-49232.rs:7:13: 7:19
StorageLive(_3); // scope 0 at $DIR/issue-49232.rs:8:19: 8:23 StorageLive(_3); // scope 0 at $DIR/issue-49232.rs:8:19: 8:23
_3 = const true; // scope 0 at $DIR/issue-49232.rs:8:19: 8:23 _3 = const true; // scope 0 at $DIR/issue-49232.rs:8:19: 8:23
FakeRead(ForMatchedPlace, _3); // scope 0 at $DIR/issue-49232.rs:8:19: 8:23 FakeRead(ForMatchedPlace, _3); // scope 0 at $DIR/issue-49232.rs:8:19: 8:23
switchInt(_3) -> [false: bb5, otherwise: bb6]; // scope 0 at $DIR/issue-49232.rs:9:17: 9:22 switchInt(_3) -> [false: bb3, otherwise: bb4]; // scope 0 at $DIR/issue-49232.rs:9:17: 9:22
} }
bb4 (cleanup): { bb3: {
resume; // scope 0 at $DIR/issue-49232.rs:5:1: 15:2 falseEdge -> [real: bb5, imaginary: bb4]; // scope 0 at $DIR/issue-49232.rs:9:17: 9:22
}
bb4: {
_0 = const (); // scope 0 at $DIR/issue-49232.rs:10:25: 10:30
goto -> bb10; // scope 0 at $DIR/issue-49232.rs:10:25: 10:30
} }
bb5: { bb5: {
falseEdge -> [real: bb7, imaginary: bb6]; // scope 0 at $DIR/issue-49232.rs:9:17: 9:22 _2 = const 4_i32; // scope 0 at $DIR/issue-49232.rs:9:26: 9:27
goto -> bb8; // scope 0 at $DIR/issue-49232.rs:8:13: 11:14
} }
bb6: { bb6: {
_0 = const (); // scope 0 at $DIR/issue-49232.rs:10:25: 10:30
goto -> bb8; // scope 0 at $DIR/issue-49232.rs:10:25: 10:30
}
bb7: {
_2 = const 4_i32; // scope 0 at $DIR/issue-49232.rs:9:26: 9:27
goto -> bb12; // scope 0 at $DIR/issue-49232.rs:8:13: 11:14
}
bb8: {
StorageDead(_3); // scope 0 at $DIR/issue-49232.rs:12:10: 12:11
goto -> bb9; // scope 0 at $DIR/issue-49232.rs:10:25: 10:30
}
bb9: {
StorageDead(_2); // scope 0 at $DIR/issue-49232.rs:14:5: 14:6
goto -> bb2; // scope 0 at $DIR/issue-49232.rs:10:25: 10:30
}
bb10: {
unreachable; // scope 0 at $DIR/issue-49232.rs:10:25: 10:30 unreachable; // scope 0 at $DIR/issue-49232.rs:10:25: 10:30
} }
bb11: { bb7: {
goto -> bb12; // scope 0 at $DIR/issue-49232.rs:8:13: 11:14 goto -> bb8; // scope 0 at $DIR/issue-49232.rs:8:13: 11:14
} }
bb12: { bb8: {
FakeRead(ForLet, _2); // scope 0 at $DIR/issue-49232.rs:7:13: 7:19 FakeRead(ForLet, _2); // scope 0 at $DIR/issue-49232.rs:7:13: 7:19
StorageDead(_3); // scope 0 at $DIR/issue-49232.rs:12:10: 12:11 StorageDead(_3); // scope 0 at $DIR/issue-49232.rs:12:10: 12:11
StorageLive(_5); // scope 1 at $DIR/issue-49232.rs:13:9: 13:22 StorageLive(_5); // scope 1 at $DIR/issue-49232.rs:13:9: 13:22
StorageLive(_6); // scope 1 at $DIR/issue-49232.rs:13:14: 13:21 StorageLive(_6); // scope 1 at $DIR/issue-49232.rs:13:14: 13:21
_6 = &_2; // scope 1 at $DIR/issue-49232.rs:13:14: 13:21 _6 = &_2; // scope 1 at $DIR/issue-49232.rs:13:14: 13:21
_5 = std::mem::drop::<&i32>(move _6) -> [return: bb13, unwind: bb4]; // scope 1 at $DIR/issue-49232.rs:13:9: 13:22 _5 = std::mem::drop::<&i32>(move _6) -> [return: bb9, unwind: bb11]; // scope 1 at $DIR/issue-49232.rs:13:9: 13:22
// mir::Constant // mir::Constant
// + span: $DIR/issue-49232.rs:13:9: 13:13 // + span: $DIR/issue-49232.rs:13:9: 13:13
// + literal: Const { ty: fn(&i32) {std::mem::drop::<&i32>}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn(&i32) {std::mem::drop::<&i32>}, val: Value(Scalar(<ZST>)) }
} }
bb13: { bb9: {
StorageDead(_6); // scope 1 at $DIR/issue-49232.rs:13:21: 13:22 StorageDead(_6); // scope 1 at $DIR/issue-49232.rs:13:21: 13:22
StorageDead(_5); // scope 1 at $DIR/issue-49232.rs:13:22: 13:23 StorageDead(_5); // scope 1 at $DIR/issue-49232.rs:13:22: 13:23
_1 = const (); // scope 0 at $DIR/issue-49232.rs:6:10: 14:6 _1 = const (); // scope 0 at $DIR/issue-49232.rs:6:10: 14:6
@ -88,7 +70,13 @@ fn main() -> () {
goto -> bb1; // scope 0 at $DIR/issue-49232.rs:6:5: 14:6 goto -> bb1; // scope 0 at $DIR/issue-49232.rs:6:5: 14:6
} }
bb14: { bb10: {
StorageDead(_3); // scope 0 at $DIR/issue-49232.rs:12:10: 12:11
StorageDead(_2); // scope 0 at $DIR/issue-49232.rs:14:5: 14:6
return; // scope 0 at $DIR/issue-49232.rs:15:2: 15:2 return; // scope 0 at $DIR/issue-49232.rs:15:2: 15:2
} }
bb11 (cleanup): {
resume; // scope 0 at $DIR/issue-49232.rs:5:1: 15:2
}
} }

View file

@ -30,89 +30,89 @@ fn test() -> Option<Box<u32>> {
StorageLive(_3); // scope 0 at $DIR/issue-62289.rs:9:15: 9:20 StorageLive(_3); // scope 0 at $DIR/issue-62289.rs:9:15: 9:20
StorageLive(_4); // scope 0 at $DIR/issue-62289.rs:9:15: 9:19 StorageLive(_4); // scope 0 at $DIR/issue-62289.rs:9:15: 9:19
_4 = Option::<u32>::None; // scope 0 at $DIR/issue-62289.rs:9:15: 9:19 _4 = Option::<u32>::None; // scope 0 at $DIR/issue-62289.rs:9:15: 9:19
_3 = <Option<u32> as Try>::into_result(move _4) -> [return: bb2, unwind: bb3]; // scope 0 at $DIR/issue-62289.rs:9:15: 9:20 _3 = <Option<u32> as Try>::into_result(move _4) -> [return: bb1, unwind: bb12]; // scope 0 at $DIR/issue-62289.rs:9:15: 9:20
// mir::Constant // mir::Constant
// + span: $DIR/issue-62289.rs:9:15: 9:20 // + span: $DIR/issue-62289.rs:9:15: 9:20
// + literal: Const { ty: fn(std::option::Option<u32>) -> std::result::Result<<std::option::Option<u32> as std::ops::Try>::Ok, <std::option::Option<u32> as std::ops::Try>::Error> {<std::option::Option<u32> as std::ops::Try>::into_result}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn(std::option::Option<u32>) -> std::result::Result<<std::option::Option<u32> as std::ops::Try>::Ok, <std::option::Option<u32> as std::ops::Try>::Error> {<std::option::Option<u32> as std::ops::Try>::into_result}, val: Value(Scalar(<ZST>)) }
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/issue-62289.rs:8:1: 10:2 StorageDead(_4); // scope 0 at $DIR/issue-62289.rs:9:19: 9:20
_5 = discriminant(_3); // scope 0 at $DIR/issue-62289.rs:9:19: 9:20
switchInt(move _5) -> [0_isize: bb2, 1_isize: bb4, otherwise: bb3]; // scope 0 at $DIR/issue-62289.rs:9:19: 9:20
} }
bb2: { bb2: {
StorageDead(_4); // scope 0 at $DIR/issue-62289.rs:9:19: 9:20
_5 = discriminant(_3); // scope 0 at $DIR/issue-62289.rs:9:19: 9:20
switchInt(move _5) -> [0_isize: bb4, 1_isize: bb6, otherwise: bb5]; // scope 0 at $DIR/issue-62289.rs:9:19: 9:20
}
bb3 (cleanup): {
drop(_2) -> bb1; // scope 0 at $DIR/issue-62289.rs:9:20: 9:21
}
bb4: {
StorageLive(_10); // scope 0 at $DIR/issue-62289.rs:9:15: 9:20 StorageLive(_10); // scope 0 at $DIR/issue-62289.rs:9:15: 9:20
_10 = ((_3 as Ok).0: u32); // scope 0 at $DIR/issue-62289.rs:9:15: 9:20 _10 = ((_3 as Ok).0: u32); // scope 0 at $DIR/issue-62289.rs:9:15: 9:20
(*_2) = _10; // scope 4 at $DIR/issue-62289.rs:9:15: 9:20 (*_2) = _10; // scope 4 at $DIR/issue-62289.rs:9:15: 9:20
StorageDead(_10); // scope 0 at $DIR/issue-62289.rs:9:19: 9:20 StorageDead(_10); // scope 0 at $DIR/issue-62289.rs:9:19: 9:20
_1 = move _2; // scope 0 at $DIR/issue-62289.rs:9:10: 9:21 _1 = move _2; // scope 0 at $DIR/issue-62289.rs:9:10: 9:21
drop(_2) -> [return: bb12, unwind: bb11]; // scope 0 at $DIR/issue-62289.rs:9:20: 9:21 drop(_2) -> [return: bb7, unwind: bb11]; // scope 0 at $DIR/issue-62289.rs:9:20: 9:21
} }
bb5: { bb3: {
unreachable; // scope 0 at $DIR/issue-62289.rs:9:15: 9:20 unreachable; // scope 0 at $DIR/issue-62289.rs:9:15: 9:20
} }
bb6: { bb4: {
StorageLive(_6); // scope 0 at $DIR/issue-62289.rs:9:19: 9:20 StorageLive(_6); // scope 0 at $DIR/issue-62289.rs:9:19: 9:20
_6 = ((_3 as Err).0: std::option::NoneError); // scope 0 at $DIR/issue-62289.rs:9:19: 9:20 _6 = ((_3 as Err).0: std::option::NoneError); // scope 0 at $DIR/issue-62289.rs:9:19: 9:20
StorageLive(_8); // scope 2 at $DIR/issue-62289.rs:9:19: 9:20 StorageLive(_8); // scope 2 at $DIR/issue-62289.rs:9:19: 9:20
StorageLive(_9); // scope 2 at $DIR/issue-62289.rs:9:19: 9:20 StorageLive(_9); // scope 2 at $DIR/issue-62289.rs:9:19: 9:20
_9 = _6; // scope 2 at $DIR/issue-62289.rs:9:19: 9:20 _9 = _6; // scope 2 at $DIR/issue-62289.rs:9:19: 9:20
_8 = <NoneError as From<NoneError>>::from(move _9) -> [return: bb8, unwind: bb3]; // scope 2 at $DIR/issue-62289.rs:9:19: 9:20 _8 = <NoneError as From<NoneError>>::from(move _9) -> [return: bb5, unwind: bb12]; // scope 2 at $DIR/issue-62289.rs:9:19: 9:20
// mir::Constant // mir::Constant
// + span: $DIR/issue-62289.rs:9:19: 9:20 // + span: $DIR/issue-62289.rs:9:19: 9:20
// + literal: Const { ty: fn(std::option::NoneError) -> std::option::NoneError {<std::option::NoneError as std::convert::From<std::option::NoneError>>::from}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn(std::option::NoneError) -> std::option::NoneError {<std::option::NoneError as std::convert::From<std::option::NoneError>>::from}, val: Value(Scalar(<ZST>)) }
} }
bb7: { bb5: {
return; // scope 0 at $DIR/issue-62289.rs:10:2: 10:2
}
bb8: {
StorageDead(_9); // scope 2 at $DIR/issue-62289.rs:9:19: 9:20 StorageDead(_9); // scope 2 at $DIR/issue-62289.rs:9:19: 9:20
_0 = <Option<Box<u32>> as Try>::from_error(move _8) -> [return: bb9, unwind: bb3]; // scope 2 at $DIR/issue-62289.rs:9:19: 9:20 _0 = <Option<Box<u32>> as Try>::from_error(move _8) -> [return: bb6, unwind: bb12]; // scope 2 at $DIR/issue-62289.rs:9:19: 9:20
// mir::Constant // mir::Constant
// + span: $DIR/issue-62289.rs:9:15: 9:20 // + span: $DIR/issue-62289.rs:9:15: 9:20
// + literal: Const { ty: fn(<std::option::Option<std::boxed::Box<u32>> as std::ops::Try>::Error) -> std::option::Option<std::boxed::Box<u32>> {<std::option::Option<std::boxed::Box<u32>> as std::ops::Try>::from_error}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn(<std::option::Option<std::boxed::Box<u32>> as std::ops::Try>::Error) -> std::option::Option<std::boxed::Box<u32>> {<std::option::Option<std::boxed::Box<u32>> as std::ops::Try>::from_error}, val: Value(Scalar(<ZST>)) }
} }
bb9: { bb6: {
StorageDead(_8); // scope 2 at $DIR/issue-62289.rs:9:19: 9:20 StorageDead(_8); // scope 2 at $DIR/issue-62289.rs:9:19: 9:20
StorageDead(_6); // scope 0 at $DIR/issue-62289.rs:9:19: 9:20 StorageDead(_6); // scope 0 at $DIR/issue-62289.rs:9:19: 9:20
drop(_2) -> bb10; // scope 0 at $DIR/issue-62289.rs:9:20: 9:21 drop(_2) -> bb9; // scope 0 at $DIR/issue-62289.rs:9:20: 9:21
}
bb7: {
StorageDead(_2); // scope 0 at $DIR/issue-62289.rs:9:20: 9:21
_0 = Option::<Box<u32>>::Some(move _1); // scope 0 at $DIR/issue-62289.rs:9:5: 9:22
drop(_1) -> bb8; // scope 0 at $DIR/issue-62289.rs:9:21: 9:22
}
bb8: {
StorageDead(_1); // scope 0 at $DIR/issue-62289.rs:9:21: 9:22
StorageDead(_3); // scope 0 at $DIR/issue-62289.rs:10:1: 10:2
goto -> bb10; // scope 0 at $DIR/issue-62289.rs:10:2: 10:2
}
bb9: {
StorageDead(_2); // scope 0 at $DIR/issue-62289.rs:9:20: 9:21
StorageDead(_1); // scope 0 at $DIR/issue-62289.rs:9:21: 9:22
StorageDead(_3); // scope 0 at $DIR/issue-62289.rs:10:1: 10:2
goto -> bb10; // scope 0 at $DIR/issue-62289.rs:10:2: 10:2
} }
bb10: { bb10: {
StorageDead(_2); // scope 0 at $DIR/issue-62289.rs:9:20: 9:21 return; // scope 0 at $DIR/issue-62289.rs:10:2: 10:2
StorageDead(_1); // scope 0 at $DIR/issue-62289.rs:9:21: 9:22
StorageDead(_3); // scope 0 at $DIR/issue-62289.rs:10:1: 10:2
goto -> bb7; // scope 0 at $DIR/issue-62289.rs:9:19: 9:20
} }
bb11 (cleanup): { bb11 (cleanup): {
drop(_1) -> bb1; // scope 0 at $DIR/issue-62289.rs:9:21: 9:22
}
bb12: {
StorageDead(_2); // scope 0 at $DIR/issue-62289.rs:9:20: 9:21
_0 = Option::<Box<u32>>::Some(move _1); // scope 0 at $DIR/issue-62289.rs:9:5: 9:22
drop(_1) -> bb13; // scope 0 at $DIR/issue-62289.rs:9:21: 9:22 drop(_1) -> bb13; // scope 0 at $DIR/issue-62289.rs:9:21: 9:22
} }
bb13: { bb12 (cleanup): {
StorageDead(_1); // scope 0 at $DIR/issue-62289.rs:9:21: 9:22 drop(_2) -> bb13; // scope 0 at $DIR/issue-62289.rs:9:20: 9:21
StorageDead(_3); // scope 0 at $DIR/issue-62289.rs:10:1: 10:2 }
goto -> bb7; // scope 0 at $DIR/issue-62289.rs:10:2: 10:2
bb13 (cleanup): {
resume; // scope 0 at $DIR/issue-62289.rs:8:1: 10:2
} }
} }

View file

@ -12,14 +12,6 @@ fn bar(_1: [(Never, u32); 1]) -> u32 {
_2 = (_1[0 of 1].1: u32); // scope 0 at $DIR/issue-72181.rs:19:13: 19:14 _2 = (_1[0 of 1].1: u32); // scope 0 at $DIR/issue-72181.rs:19:13: 19:14
_0 = _2; // scope 1 at $DIR/issue-72181.rs:19:46: 19:47 _0 = _2; // scope 1 at $DIR/issue-72181.rs:19:46: 19:47
StorageDead(_2); // scope 0 at $DIR/issue-72181.rs:19:48: 19:49 StorageDead(_2); // scope 0 at $DIR/issue-72181.rs:19:48: 19:49
goto -> bb2; // scope 0 at $DIR/issue-72181.rs:19:49: 19:49
}
bb1 (cleanup): {
resume; // scope 0 at $DIR/issue-72181.rs:19:1: 19:49
}
bb2: {
return; // scope 0 at $DIR/issue-72181.rs:19:49: 19:49 return; // scope 0 at $DIR/issue-72181.rs:19:49: 19:49
} }
} }

View file

@ -12,14 +12,6 @@ fn bar(_1: [(Never, u32); 1]) -> u32 {
_2 = (_1[0 of 1].1: u32); // scope 0 at $DIR/issue-72181.rs:19:13: 19:14 _2 = (_1[0 of 1].1: u32); // scope 0 at $DIR/issue-72181.rs:19:13: 19:14
_0 = _2; // scope 1 at $DIR/issue-72181.rs:19:46: 19:47 _0 = _2; // scope 1 at $DIR/issue-72181.rs:19:46: 19:47
StorageDead(_2); // scope 0 at $DIR/issue-72181.rs:19:48: 19:49 StorageDead(_2); // scope 0 at $DIR/issue-72181.rs:19:48: 19:49
goto -> bb2; // scope 0 at $DIR/issue-72181.rs:19:49: 19:49
}
bb1 (cleanup): {
resume; // scope 0 at $DIR/issue-72181.rs:19:1: 19:49
}
bb2: {
return; // scope 0 at $DIR/issue-72181.rs:19:49: 19:49 return; // scope 0 at $DIR/issue-72181.rs:19:49: 19:49
} }
} }

View file

@ -12,20 +12,16 @@ fn foo(_1: [(Never, u32); 1]) -> u32 {
_2 = const 0_usize; // scope 0 at $DIR/issue-72181.rs:16:43: 16:44 _2 = const 0_usize; // scope 0 at $DIR/issue-72181.rs:16:43: 16:44
_3 = Len(_1); // scope 0 at $DIR/issue-72181.rs:16:40: 16:45 _3 = Len(_1); // scope 0 at $DIR/issue-72181.rs:16:40: 16:45
_4 = Lt(_2, _3); // scope 0 at $DIR/issue-72181.rs:16:40: 16:45 _4 = Lt(_2, _3); // scope 0 at $DIR/issue-72181.rs:16:40: 16:45
assert(move _4, "index out of bounds: the length is {} but the index is {}", move _3, _2) -> [success: bb2, unwind: bb1]; // scope 0 at $DIR/issue-72181.rs:16:40: 16:45 assert(move _4, "index out of bounds: the length is {} but the index is {}", move _3, _2) -> [success: bb1, unwind: bb2]; // scope 0 at $DIR/issue-72181.rs:16:40: 16:45
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/issue-72181.rs:16:1: 16:49
}
bb2: {
_0 = (_1[_2].1: u32); // scope 0 at $DIR/issue-72181.rs:16:40: 16:47 _0 = (_1[_2].1: u32); // scope 0 at $DIR/issue-72181.rs:16:40: 16:47
StorageDead(_2); // scope 0 at $DIR/issue-72181.rs:16:48: 16:49 StorageDead(_2); // scope 0 at $DIR/issue-72181.rs:16:48: 16:49
goto -> bb3; // scope 0 at $DIR/issue-72181.rs:16:49: 16:49
}
bb3: {
return; // scope 0 at $DIR/issue-72181.rs:16:49: 16:49 return; // scope 0 at $DIR/issue-72181.rs:16:49: 16:49
} }
bb2 (cleanup): {
resume; // scope 0 at $DIR/issue-72181.rs:16:1: 16:49
}
} }

View file

@ -12,20 +12,16 @@ fn foo(_1: [(Never, u32); 1]) -> u32 {
_2 = const 0_usize; // scope 0 at $DIR/issue-72181.rs:16:43: 16:44 _2 = const 0_usize; // scope 0 at $DIR/issue-72181.rs:16:43: 16:44
_3 = Len(_1); // scope 0 at $DIR/issue-72181.rs:16:40: 16:45 _3 = Len(_1); // scope 0 at $DIR/issue-72181.rs:16:40: 16:45
_4 = Lt(_2, _3); // scope 0 at $DIR/issue-72181.rs:16:40: 16:45 _4 = Lt(_2, _3); // scope 0 at $DIR/issue-72181.rs:16:40: 16:45
assert(move _4, "index out of bounds: the length is {} but the index is {}", move _3, _2) -> [success: bb2, unwind: bb1]; // scope 0 at $DIR/issue-72181.rs:16:40: 16:45 assert(move _4, "index out of bounds: the length is {} but the index is {}", move _3, _2) -> [success: bb1, unwind: bb2]; // scope 0 at $DIR/issue-72181.rs:16:40: 16:45
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/issue-72181.rs:16:1: 16:49
}
bb2: {
_0 = (_1[_2].1: u32); // scope 0 at $DIR/issue-72181.rs:16:40: 16:47 _0 = (_1[_2].1: u32); // scope 0 at $DIR/issue-72181.rs:16:40: 16:47
StorageDead(_2); // scope 0 at $DIR/issue-72181.rs:16:48: 16:49 StorageDead(_2); // scope 0 at $DIR/issue-72181.rs:16:48: 16:49
goto -> bb3; // scope 0 at $DIR/issue-72181.rs:16:49: 16:49
}
bb3: {
return; // scope 0 at $DIR/issue-72181.rs:16:49: 16:49 return; // scope 0 at $DIR/issue-72181.rs:16:49: 16:49
} }
bb2 (cleanup): {
resume; // scope 0 at $DIR/issue-72181.rs:16:1: 16:49
}
} }

View file

@ -22,17 +22,13 @@ fn main() -> () {
bb0: { bb0: {
StorageLive(_1); // scope 0 at $DIR/issue-72181.rs:24:13: 24:34 StorageLive(_1); // scope 0 at $DIR/issue-72181.rs:24:13: 24:34
_1 = std::mem::size_of::<Foo>() -> [return: bb2, unwind: bb1]; // scope 0 at $DIR/issue-72181.rs:24:13: 24:34 _1 = std::mem::size_of::<Foo>() -> [return: bb1, unwind: bb3]; // scope 0 at $DIR/issue-72181.rs:24:13: 24:34
// mir::Constant // mir::Constant
// + span: $DIR/issue-72181.rs:24:13: 24:32 // + span: $DIR/issue-72181.rs:24:13: 24:32
// + literal: Const { ty: fn() -> usize {std::mem::size_of::<Foo>}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn() -> usize {std::mem::size_of::<Foo>}, val: Value(Scalar(<ZST>)) }
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/issue-72181.rs:23:1: 28:2
}
bb2: {
StorageDead(_1); // scope 0 at $DIR/issue-72181.rs:24:34: 24:35 StorageDead(_1); // scope 0 at $DIR/issue-72181.rs:24:34: 24:35
StorageLive(_2); // scope 1 at $DIR/issue-72181.rs:26:9: 26:10 StorageLive(_2); // scope 1 at $DIR/issue-72181.rs:26:9: 26:10
StorageLive(_3); // scope 1 at $DIR/issue-72181.rs:26:14: 26:27 StorageLive(_3); // scope 1 at $DIR/issue-72181.rs:26:14: 26:27
@ -48,19 +44,19 @@ fn main() -> () {
_6 = const 0_usize; // scope 4 at $DIR/issue-72181.rs:27:24: 27:25 _6 = const 0_usize; // scope 4 at $DIR/issue-72181.rs:27:24: 27:25
_7 = Len(_2); // scope 4 at $DIR/issue-72181.rs:27:22: 27:26 _7 = Len(_2); // scope 4 at $DIR/issue-72181.rs:27:22: 27:26
_8 = Lt(_6, _7); // scope 4 at $DIR/issue-72181.rs:27:22: 27:26 _8 = Lt(_6, _7); // scope 4 at $DIR/issue-72181.rs:27:22: 27:26
assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb3, unwind: bb1]; // scope 4 at $DIR/issue-72181.rs:27:22: 27:26 assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb2, unwind: bb3]; // scope 4 at $DIR/issue-72181.rs:27:22: 27:26
} }
bb3: { bb2: {
_5 = (_2[_6].0: u64); // scope 4 at $DIR/issue-72181.rs:27:22: 27:28 _5 = (_2[_6].0: u64); // scope 4 at $DIR/issue-72181.rs:27:22: 27:28
StorageDead(_6); // scope 2 at $DIR/issue-72181.rs:27:30: 27:31 StorageDead(_6); // scope 2 at $DIR/issue-72181.rs:27:30: 27:31
StorageDead(_5); // scope 2 at $DIR/issue-72181.rs:27:30: 27:31 StorageDead(_5); // scope 2 at $DIR/issue-72181.rs:27:30: 27:31
_0 = const (); // scope 0 at $DIR/issue-72181.rs:23:11: 28:2 _0 = const (); // scope 0 at $DIR/issue-72181.rs:23:11: 28:2
StorageDead(_2); // scope 1 at $DIR/issue-72181.rs:28:1: 28:2 StorageDead(_2); // scope 1 at $DIR/issue-72181.rs:28:1: 28:2
goto -> bb4; // scope 0 at $DIR/issue-72181.rs:28:2: 28:2
}
bb4: {
return; // scope 0 at $DIR/issue-72181.rs:28:2: 28:2 return; // scope 0 at $DIR/issue-72181.rs:28:2: 28:2
} }
bb3 (cleanup): {
resume; // scope 0 at $DIR/issue-72181.rs:23:1: 28:2
}
} }

View file

@ -22,17 +22,13 @@ fn main() -> () {
bb0: { bb0: {
StorageLive(_1); // scope 0 at $DIR/issue-72181.rs:24:13: 24:34 StorageLive(_1); // scope 0 at $DIR/issue-72181.rs:24:13: 24:34
_1 = std::mem::size_of::<Foo>() -> [return: bb2, unwind: bb1]; // scope 0 at $DIR/issue-72181.rs:24:13: 24:34 _1 = std::mem::size_of::<Foo>() -> [return: bb1, unwind: bb3]; // scope 0 at $DIR/issue-72181.rs:24:13: 24:34
// mir::Constant // mir::Constant
// + span: $DIR/issue-72181.rs:24:13: 24:32 // + span: $DIR/issue-72181.rs:24:13: 24:32
// + literal: Const { ty: fn() -> usize {std::mem::size_of::<Foo>}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn() -> usize {std::mem::size_of::<Foo>}, val: Value(Scalar(<ZST>)) }
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/issue-72181.rs:23:1: 28:2
}
bb2: {
StorageDead(_1); // scope 0 at $DIR/issue-72181.rs:24:34: 24:35 StorageDead(_1); // scope 0 at $DIR/issue-72181.rs:24:34: 24:35
StorageLive(_2); // scope 1 at $DIR/issue-72181.rs:26:9: 26:10 StorageLive(_2); // scope 1 at $DIR/issue-72181.rs:26:9: 26:10
StorageLive(_3); // scope 1 at $DIR/issue-72181.rs:26:14: 26:27 StorageLive(_3); // scope 1 at $DIR/issue-72181.rs:26:14: 26:27
@ -48,19 +44,19 @@ fn main() -> () {
_6 = const 0_usize; // scope 4 at $DIR/issue-72181.rs:27:24: 27:25 _6 = const 0_usize; // scope 4 at $DIR/issue-72181.rs:27:24: 27:25
_7 = Len(_2); // scope 4 at $DIR/issue-72181.rs:27:22: 27:26 _7 = Len(_2); // scope 4 at $DIR/issue-72181.rs:27:22: 27:26
_8 = Lt(_6, _7); // scope 4 at $DIR/issue-72181.rs:27:22: 27:26 _8 = Lt(_6, _7); // scope 4 at $DIR/issue-72181.rs:27:22: 27:26
assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb3, unwind: bb1]; // scope 4 at $DIR/issue-72181.rs:27:22: 27:26 assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb2, unwind: bb3]; // scope 4 at $DIR/issue-72181.rs:27:22: 27:26
} }
bb3: { bb2: {
_5 = (_2[_6].0: u64); // scope 4 at $DIR/issue-72181.rs:27:22: 27:28 _5 = (_2[_6].0: u64); // scope 4 at $DIR/issue-72181.rs:27:22: 27:28
StorageDead(_6); // scope 2 at $DIR/issue-72181.rs:27:30: 27:31 StorageDead(_6); // scope 2 at $DIR/issue-72181.rs:27:30: 27:31
StorageDead(_5); // scope 2 at $DIR/issue-72181.rs:27:30: 27:31 StorageDead(_5); // scope 2 at $DIR/issue-72181.rs:27:30: 27:31
_0 = const (); // scope 0 at $DIR/issue-72181.rs:23:11: 28:2 _0 = const (); // scope 0 at $DIR/issue-72181.rs:23:11: 28:2
StorageDead(_2); // scope 1 at $DIR/issue-72181.rs:28:1: 28:2 StorageDead(_2); // scope 1 at $DIR/issue-72181.rs:28:1: 28:2
goto -> bb4; // scope 0 at $DIR/issue-72181.rs:28:2: 28:2
}
bb4: {
return; // scope 0 at $DIR/issue-72181.rs:28:2: 28:2 return; // scope 0 at $DIR/issue-72181.rs:28:2: 28:2
} }
bb3 (cleanup): {
resume; // scope 0 at $DIR/issue-72181.rs:23:1: 28:2
}
} }

View file

@ -13,25 +13,17 @@ fn f(_1: Void) -> ! {
unreachable; // scope 0 at $DIR/issue-72181-1.rs:11:11: 11:12 unreachable; // scope 0 at $DIR/issue-72181-1.rs:11:11: 11:12
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/issue-72181-1.rs:10:1: 12:2
}
bb2: {
unreachable; // scope 0 at $DIR/issue-72181-1.rs:11:5: 11:15 unreachable; // scope 0 at $DIR/issue-72181-1.rs:11:5: 11:15
} }
bb3: { bb2: {
StorageDead(_3); // scope 0 at $DIR/issue-72181-1.rs:11:14: 11:15 StorageDead(_3); // scope 0 at $DIR/issue-72181-1.rs:11:14: 11:15
unreachable; // scope 0 at $DIR/issue-72181-1.rs:10:20: 12:2 unreachable; // scope 0 at $DIR/issue-72181-1.rs:10:20: 12:2
} }
bb4: { bb3: {
StorageDead(_2); // scope 0 at $DIR/issue-72181-1.rs:12:1: 12:2 StorageDead(_2); // scope 0 at $DIR/issue-72181-1.rs:12:1: 12:2
goto -> bb5; // scope 0 at $DIR/issue-72181-1.rs:12:2: 12:2
}
bb5: {
return; // scope 0 at $DIR/issue-72181-1.rs:12:2: 12:2 return; // scope 0 at $DIR/issue-72181-1.rs:12:2: 12:2
} }
} }

View file

@ -21,41 +21,37 @@ fn main() -> () {
StorageLive(_2); // scope 0 at $DIR/issue-72181-1.rs:16:9: 16:10 StorageLive(_2); // scope 0 at $DIR/issue-72181-1.rs:16:9: 16:10
StorageLive(_3); // scope 2 at $DIR/issue-72181-1.rs:17:41: 17:43 StorageLive(_3); // scope 2 at $DIR/issue-72181-1.rs:17:41: 17:43
_3 = (); // scope 2 at $DIR/issue-72181-1.rs:17:41: 17:43 _3 = (); // scope 2 at $DIR/issue-72181-1.rs:17:41: 17:43
_2 = transmute::<(), Void>(move _3) -> [return: bb2, unwind: bb1]; // scope 2 at $DIR/issue-72181-1.rs:17:9: 17:44 _2 = transmute::<(), Void>(move _3) -> [return: bb1, unwind: bb4]; // scope 2 at $DIR/issue-72181-1.rs:17:9: 17:44
// mir::Constant // mir::Constant
// + span: $DIR/issue-72181-1.rs:17:9: 17:40 // + span: $DIR/issue-72181-1.rs:17:9: 17:40
// + literal: Const { ty: unsafe extern "rust-intrinsic" fn(()) -> Void {std::intrinsics::transmute::<(), Void>}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: unsafe extern "rust-intrinsic" fn(()) -> Void {std::intrinsics::transmute::<(), Void>}, val: Value(Scalar(<ZST>)) }
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/issue-72181-1.rs:15:1: 21:2
}
bb2: {
StorageDead(_3); // scope 2 at $DIR/issue-72181-1.rs:17:43: 17:44 StorageDead(_3); // scope 2 at $DIR/issue-72181-1.rs:17:43: 17:44
FakeRead(ForLet, _2); // scope 0 at $DIR/issue-72181-1.rs:16:9: 16:10 FakeRead(ForLet, _2); // scope 0 at $DIR/issue-72181-1.rs:16:9: 16:10
AscribeUserType(_2, o, UserTypeProjection { base: UserType(1), projs: [] }); // scope 0 at $DIR/issue-72181-1.rs:16:12: 16:16 AscribeUserType(_2, o, UserTypeProjection { base: UserType(1), projs: [] }); // scope 0 at $DIR/issue-72181-1.rs:16:12: 16:16
StorageLive(_4); // scope 1 at $DIR/issue-72181-1.rs:20:5: 20:9 StorageLive(_4); // scope 1 at $DIR/issue-72181-1.rs:20:5: 20:9
StorageLive(_5); // scope 1 at $DIR/issue-72181-1.rs:20:7: 20:8 StorageLive(_5); // scope 1 at $DIR/issue-72181-1.rs:20:7: 20:8
_5 = move _2; // scope 1 at $DIR/issue-72181-1.rs:20:7: 20:8 _5 = move _2; // scope 1 at $DIR/issue-72181-1.rs:20:7: 20:8
f(move _5) -> bb1; // scope 1 at $DIR/issue-72181-1.rs:20:5: 20:9 f(move _5) -> bb4; // scope 1 at $DIR/issue-72181-1.rs:20:5: 20:9
// mir::Constant // mir::Constant
// + span: $DIR/issue-72181-1.rs:20:5: 20:6 // + span: $DIR/issue-72181-1.rs:20:5: 20:6
// + literal: Const { ty: fn(Void) -> ! {f}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn(Void) -> ! {f}, val: Value(Scalar(<ZST>)) }
} }
bb3: { bb2: {
StorageDead(_5); // scope 1 at $DIR/issue-72181-1.rs:20:8: 20:9 StorageDead(_5); // scope 1 at $DIR/issue-72181-1.rs:20:8: 20:9
StorageDead(_4); // scope 1 at $DIR/issue-72181-1.rs:20:9: 20:10 StorageDead(_4); // scope 1 at $DIR/issue-72181-1.rs:20:9: 20:10
StorageDead(_2); // scope 0 at $DIR/issue-72181-1.rs:21:1: 21:2 StorageDead(_2); // scope 0 at $DIR/issue-72181-1.rs:21:1: 21:2
unreachable; // scope 0 at $DIR/issue-72181-1.rs:15:11: 21:2 unreachable; // scope 0 at $DIR/issue-72181-1.rs:15:11: 21:2
} }
bb4: { bb3: {
goto -> bb5; // scope 0 at $DIR/issue-72181-1.rs:21:2: 21:2
}
bb5: {
return; // scope 0 at $DIR/issue-72181-1.rs:21:2: 21:2 return; // scope 0 at $DIR/issue-72181-1.rs:21:2: 21:2
} }
bb4 (cleanup): {
resume; // scope 0 at $DIR/issue-72181-1.rs:15:1: 21:2
}
} }

View file

@ -106,7 +106,7 @@
_0 = const (); // scope 0 at $DIR/issue-73223.rs:4:17: 4:23 _0 = const (); // scope 0 at $DIR/issue-73223.rs:4:17: 4:23
StorageDead(_2); // scope 0 at $DIR/issue-73223.rs:5:6: 5:7 StorageDead(_2); // scope 0 at $DIR/issue-73223.rs:5:6: 5:7
StorageDead(_1); // scope 0 at $DIR/issue-73223.rs:9:1: 9:2 StorageDead(_1); // scope 0 at $DIR/issue-73223.rs:9:1: 9:2
return; // scope 0 at $DIR/issue-73223.rs:4:17: 4:23 return; // scope 0 at $DIR/issue-73223.rs:9:2: 9:2
} }
bb2: { bb2: {

View file

@ -106,7 +106,7 @@
_0 = const (); // scope 0 at $DIR/issue-73223.rs:4:17: 4:23 _0 = const (); // scope 0 at $DIR/issue-73223.rs:4:17: 4:23
StorageDead(_2); // scope 0 at $DIR/issue-73223.rs:5:6: 5:7 StorageDead(_2); // scope 0 at $DIR/issue-73223.rs:5:6: 5:7
StorageDead(_1); // scope 0 at $DIR/issue-73223.rs:9:1: 9:2 StorageDead(_1); // scope 0 at $DIR/issue-73223.rs:9:1: 9:2
return; // scope 0 at $DIR/issue-73223.rs:4:17: 4:23 return; // scope 0 at $DIR/issue-73223.rs:9:2: 9:2
} }
bb2: { bb2: {

View file

@ -17,41 +17,41 @@ fn main() -> () {
StorageLive(_2); // scope 0 at $DIR/loop_test.rs:10:8: 10:12 StorageLive(_2); // scope 0 at $DIR/loop_test.rs:10:8: 10:12
_2 = const true; // scope 0 at $DIR/loop_test.rs:10:8: 10:12 _2 = const true; // scope 0 at $DIR/loop_test.rs:10:8: 10:12
FakeRead(ForMatchedPlace, _2); // scope 0 at $DIR/loop_test.rs:10:8: 10:12 FakeRead(ForMatchedPlace, _2); // scope 0 at $DIR/loop_test.rs:10:8: 10:12
switchInt(_2) -> [false: bb3, otherwise: bb2]; // scope 0 at $DIR/loop_test.rs:10:5: 12:6 switchInt(_2) -> [false: bb2, otherwise: bb1]; // scope 0 at $DIR/loop_test.rs:10:5: 12:6
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/loop_test.rs:6:1: 17:2 falseEdge -> [real: bb3, imaginary: bb2]; // scope 0 at $DIR/loop_test.rs:10:5: 12:6
} }
bb2: { bb2: {
falseEdge -> [real: bb4, imaginary: bb3]; // scope 0 at $DIR/loop_test.rs:10:5: 12:6
}
bb3: {
_1 = const (); // scope 0 at $DIR/loop_test.rs:10:5: 12:6 _1 = const (); // scope 0 at $DIR/loop_test.rs:10:5: 12:6
StorageDead(_2); // scope 0 at $DIR/loop_test.rs:12:5: 12:6 StorageDead(_2); // scope 0 at $DIR/loop_test.rs:12:5: 12:6
StorageDead(_1); // scope 0 at $DIR/loop_test.rs:12:5: 12:6 StorageDead(_1); // scope 0 at $DIR/loop_test.rs:12:5: 12:6
StorageLive(_4); // scope 0 at $DIR/loop_test.rs:13:5: 16:6 StorageLive(_4); // scope 0 at $DIR/loop_test.rs:13:5: 16:6
goto -> bb5; // scope 0 at $DIR/loop_test.rs:13:5: 16:6 goto -> bb4; // scope 0 at $DIR/loop_test.rs:13:5: 16:6
} }
bb4: { bb3: {
_0 = const (); // scope 0 at $DIR/loop_test.rs:11:9: 11:15 _0 = const (); // scope 0 at $DIR/loop_test.rs:11:9: 11:15
StorageDead(_2); // scope 0 at $DIR/loop_test.rs:12:5: 12:6 StorageDead(_2); // scope 0 at $DIR/loop_test.rs:12:5: 12:6
StorageDead(_1); // scope 0 at $DIR/loop_test.rs:12:5: 12:6 StorageDead(_1); // scope 0 at $DIR/loop_test.rs:12:5: 12:6
return; // scope 0 at $DIR/loop_test.rs:17:2: 17:2 return; // scope 0 at $DIR/loop_test.rs:17:2: 17:2
} }
bb5: { bb4: {
falseUnwind -> [real: bb6, cleanup: bb1]; // scope 0 at $DIR/loop_test.rs:13:5: 16:6 falseUnwind -> [real: bb5, cleanup: bb6]; // scope 0 at $DIR/loop_test.rs:13:5: 16:6
} }
bb6: { bb5: {
StorageLive(_6); // scope 0 at $DIR/loop_test.rs:14:13: 14:14 StorageLive(_6); // scope 0 at $DIR/loop_test.rs:14:13: 14:14
_6 = const 1_i32; // scope 0 at $DIR/loop_test.rs:14:17: 14:18 _6 = const 1_i32; // scope 0 at $DIR/loop_test.rs:14:17: 14:18
FakeRead(ForLet, _6); // scope 0 at $DIR/loop_test.rs:14:13: 14:14 FakeRead(ForLet, _6); // scope 0 at $DIR/loop_test.rs:14:13: 14:14
StorageDead(_6); // scope 0 at $DIR/loop_test.rs:16:5: 16:6 StorageDead(_6); // scope 0 at $DIR/loop_test.rs:16:5: 16:6
goto -> bb5; // scope 0 at $DIR/loop_test.rs:15:9: 15:17 goto -> bb4; // scope 0 at $DIR/loop_test.rs:1:1: 1:1
}
bb6 (cleanup): {
resume; // scope 0 at $DIR/loop_test.rs:6:1: 17:2
} }
} }

View file

@ -32,54 +32,50 @@
bb0: { bb0: {
- FakeRead(ForMatchedPlace, _2); // scope 0 at $DIR/match-arm-scopes.rs:14:11: 14:16 - FakeRead(ForMatchedPlace, _2); // scope 0 at $DIR/match-arm-scopes.rs:14:11: 14:16
- switchInt((_2.0: bool)) -> [false: bb2, otherwise: bb3]; // scope 0 at $DIR/match-arm-scopes.rs:15:10: 15:15 - switchInt((_2.0: bool)) -> [false: bb1, otherwise: bb2]; // scope 0 at $DIR/match-arm-scopes.rs:15:10: 15:15
+ switchInt((_2.0: bool)) -> [false: bb6, otherwise: bb2]; // scope 0 at $DIR/match-arm-scopes.rs:15:10: 15:15 + switchInt((_2.0: bool)) -> [false: bb5, otherwise: bb1]; // scope 0 at $DIR/match-arm-scopes.rs:15:10: 15:15
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/match-arm-scopes.rs:13:1: 18:2 - falseEdge -> [real: bb8, imaginary: bb3]; // scope 0 at $DIR/match-arm-scopes.rs:15:9: 15:22
+ switchInt((_2.1: bool)) -> [false: bb10, otherwise: bb2]; // scope 0 at $DIR/match-arm-scopes.rs:15:29: 15:34
} }
bb2: { bb2: {
- falseEdge -> [real: bb9, imaginary: bb4]; // scope 0 at $DIR/match-arm-scopes.rs:15:9: 15:22 - switchInt((_2.1: bool)) -> [false: bb3, otherwise: bb4]; // scope 0 at $DIR/match-arm-scopes.rs:15:29: 15:34
+ switchInt((_2.1: bool)) -> [false: bb14, otherwise: bb3]; // scope 0 at $DIR/match-arm-scopes.rs:15:29: 15:34 + switchInt((_2.0: bool)) -> [false: bb3, otherwise: bb17]; // scope 0 at $DIR/match-arm-scopes.rs:16:10: 16:14
} }
bb3: { bb3: {
- switchInt((_2.1: bool)) -> [false: bb4, otherwise: bb5]; // scope 0 at $DIR/match-arm-scopes.rs:15:29: 15:34 - falseEdge -> [real: bb14, imaginary: bb5]; // scope 0 at $DIR/match-arm-scopes.rs:15:25: 15:38
+ switchInt((_2.0: bool)) -> [false: bb4, otherwise: bb21]; // scope 0 at $DIR/match-arm-scopes.rs:16:10: 16:14 - }
} -
- bb4: {
bb4: { - switchInt((_2.0: bool)) -> [false: bb6, otherwise: bb5]; // scope 0 at $DIR/match-arm-scopes.rs:16:10: 16:14
- falseEdge -> [real: bb18, imaginary: bb6]; // scope 0 at $DIR/match-arm-scopes.rs:15:25: 15:38
- } - }
- -
- bb5: { - bb5: {
- switchInt((_2.0: bool)) -> [false: bb7, otherwise: bb6]; // scope 0 at $DIR/match-arm-scopes.rs:16:10: 16:14 - falseEdge -> [real: bb22, imaginary: bb6]; // scope 0 at $DIR/match-arm-scopes.rs:16:9: 16:21
- } - }
- -
- bb6: { - bb6: {
- falseEdge -> [real: bb26, imaginary: bb7]; // scope 0 at $DIR/match-arm-scopes.rs:16:9: 16:21
- }
-
- bb7: {
StorageLive(_15); // scope 0 at $DIR/match-arm-scopes.rs:16:32: 16:33 StorageLive(_15); // scope 0 at $DIR/match-arm-scopes.rs:16:32: 16:33
_15 = (_2.1: bool); // scope 0 at $DIR/match-arm-scopes.rs:16:32: 16:33 _15 = (_2.1: bool); // scope 0 at $DIR/match-arm-scopes.rs:16:32: 16:33
StorageLive(_16); // scope 0 at $DIR/match-arm-scopes.rs:16:35: 16:36 StorageLive(_16); // scope 0 at $DIR/match-arm-scopes.rs:16:35: 16:36
_16 = move (_2.2: std::string::String); // scope 0 at $DIR/match-arm-scopes.rs:16:35: 16:36 _16 = move (_2.2: std::string::String); // scope 0 at $DIR/match-arm-scopes.rs:16:35: 16:36
- goto -> bb25; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6 - goto -> bb21; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
+ goto -> bb20; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6 + goto -> bb16; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
}
- bb7: {
+ bb4: {
_0 = const 1_i32; // scope 1 at $DIR/match-arm-scopes.rs:15:77: 15:78
- drop(_7) -> [return: bb20, unwind: bb27]; // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78
+ drop(_7) -> [return: bb15, unwind: bb22]; // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78
} }
- bb8: { - bb8: {
+ bb5: { + bb5: {
_0 = const 1_i32; // scope 1 at $DIR/match-arm-scopes.rs:15:77: 15:78
- drop(_7) -> [return: bb24, unwind: bb14]; // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78
+ drop(_7) -> [return: bb19, unwind: bb10]; // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78
}
- bb9: {
+ bb6: {
StorageLive(_6); // scope 0 at $DIR/match-arm-scopes.rs:15:17: 15:18 StorageLive(_6); // scope 0 at $DIR/match-arm-scopes.rs:15:17: 15:18
_6 = &(_2.1: bool); // scope 0 at $DIR/match-arm-scopes.rs:15:17: 15:18 _6 = &(_2.1: bool); // scope 0 at $DIR/match-arm-scopes.rs:15:17: 15:18
StorageLive(_8); // scope 0 at $DIR/match-arm-scopes.rs:15:20: 15:21 StorageLive(_8); // scope 0 at $DIR/match-arm-scopes.rs:15:20: 15:21
@ -90,52 +86,33 @@
StorageLive(_10); // scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49 StorageLive(_10); // scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49
_10 = _1; // scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49 _10 = _1; // scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49
- FakeRead(ForMatchedPlace, _10); // scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49 - FakeRead(ForMatchedPlace, _10); // scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49
- switchInt(_10) -> [false: bb11, otherwise: bb10]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73 - switchInt(_10) -> [false: bb10, otherwise: bb9]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+ switchInt(_10) -> [false: bb7, otherwise: bb8]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73 + switchInt(_10) -> [false: bb6, otherwise: bb7]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
} }
- bb10: { - bb9: {
- falseEdge -> [real: bb12, imaginary: bb11]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73 - falseEdge -> [real: bb11, imaginary: bb10]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
- } - }
- -
- bb11: { - bb10: {
+ bb7: { + bb6: {
_9 = (*_6); // scope 0 at $DIR/match-arm-scopes.rs:15:70: 15:71 _9 = (*_6); // scope 0 at $DIR/match-arm-scopes.rs:15:70: 15:71
StorageDead(_10); // scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73 StorageDead(_10); // scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
- switchInt(move _9) -> [false: bb17, otherwise: bb16]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73 - switchInt(move _9) -> [false: bb13, otherwise: bb12]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+ switchInt(move _9) -> [false: bb13, otherwise: bb12]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73 + switchInt(move _9) -> [false: bb9, otherwise: bb8]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
}
- bb11: {
+ bb7: {
_0 = const 3_i32; // scope 0 at $DIR/match-arm-scopes.rs:15:59: 15:60
StorageDead(_10); // scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
StorageDead(_9); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78
- goto -> bb25; // scope 0 at $DIR/match-arm-scopes.rs:1:1: 1:1
+ goto -> bb20; // scope 0 at $DIR/match-arm-scopes.rs:1:1: 1:1
} }
- bb12: { - bb12: {
+ bb8: { + bb8: {
_0 = const 3_i32; // scope 0 at $DIR/match-arm-scopes.rs:15:59: 15:60
StorageDead(_10); // scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
StorageDead(_9); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78
StorageDead(_8); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78
StorageDead(_6); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78
- goto -> bb15; // scope 0 at $DIR/match-arm-scopes.rs:15:52: 15:60
+ goto -> bb11; // scope 0 at $DIR/match-arm-scopes.rs:15:52: 15:60
}
- bb13: {
+ bb9: {
return; // scope 0 at $DIR/match-arm-scopes.rs:18:2: 18:2
}
- bb14 (cleanup): {
- drop(_2) -> bb1; // scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
+ bb10 (cleanup): {
+ goto -> bb25; // scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
}
- bb15: {
- drop(_2) -> [return: bb13, unwind: bb1]; // scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
+ bb11: {
+ drop(_2) -> [return: bb9, unwind: bb1]; // scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
}
- bb16: {
+ bb12: {
StorageDead(_9); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78 StorageDead(_9); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78
- FakeRead(ForMatchGuard, _3); // scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73 - FakeRead(ForMatchGuard, _3); // scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
- FakeRead(ForMatchGuard, _4); // scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73 - FakeRead(ForMatchGuard, _4); // scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
@ -145,21 +122,21 @@
_5 = (_2.1: bool); // scope 0 at $DIR/match-arm-scopes.rs:15:17: 15:18 _5 = (_2.1: bool); // scope 0 at $DIR/match-arm-scopes.rs:15:17: 15:18
StorageLive(_7); // scope 0 at $DIR/match-arm-scopes.rs:15:20: 15:21 StorageLive(_7); // scope 0 at $DIR/match-arm-scopes.rs:15:20: 15:21
_7 = move (_2.2: std::string::String); // scope 0 at $DIR/match-arm-scopes.rs:15:20: 15:21 _7 = move (_2.2: std::string::String); // scope 0 at $DIR/match-arm-scopes.rs:15:20: 15:21
- goto -> bb8; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6 - goto -> bb7; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
+ goto -> bb5; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6 + goto -> bb4; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
} }
- bb17: { - bb13: {
+ bb13: { + bb9: {
StorageDead(_9); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78 StorageDead(_9); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78
StorageDead(_8); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78 StorageDead(_8); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78
StorageDead(_6); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78 StorageDead(_6); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78
- falseEdge -> [real: bb3, imaginary: bb4]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73 - falseEdge -> [real: bb2, imaginary: bb3]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+ goto -> bb2; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73 + goto -> bb1; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
} }
- bb18: { - bb14: {
+ bb14: { + bb10: {
StorageLive(_6); // scope 0 at $DIR/match-arm-scopes.rs:15:26: 15:27 StorageLive(_6); // scope 0 at $DIR/match-arm-scopes.rs:15:26: 15:27
_6 = &(_2.0: bool); // scope 0 at $DIR/match-arm-scopes.rs:15:26: 15:27 _6 = &(_2.0: bool); // scope 0 at $DIR/match-arm-scopes.rs:15:26: 15:27
StorageLive(_8); // scope 0 at $DIR/match-arm-scopes.rs:15:36: 15:37 StorageLive(_8); // scope 0 at $DIR/match-arm-scopes.rs:15:36: 15:37
@ -170,35 +147,33 @@
StorageLive(_13); // scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49 StorageLive(_13); // scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49
_13 = _1; // scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49 _13 = _1; // scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49
- FakeRead(ForMatchedPlace, _13); // scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49 - FakeRead(ForMatchedPlace, _13); // scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49
- switchInt(_13) -> [false: bb20, otherwise: bb19]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73 - switchInt(_13) -> [false: bb16, otherwise: bb15]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+ switchInt(_13) -> [false: bb15, otherwise: bb16]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73 + switchInt(_13) -> [false: bb11, otherwise: bb12]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
} }
- bb19: { - bb15: {
- falseEdge -> [real: bb21, imaginary: bb20]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73 - falseEdge -> [real: bb17, imaginary: bb16]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
- } - }
- -
- bb20: { - bb16: {
+ bb15: { + bb11: {
_12 = (*_6); // scope 0 at $DIR/match-arm-scopes.rs:15:70: 15:71 _12 = (*_6); // scope 0 at $DIR/match-arm-scopes.rs:15:70: 15:71
StorageDead(_13); // scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73 StorageDead(_13); // scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
- switchInt(move _12) -> [false: bb23, otherwise: bb22]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73 - switchInt(move _12) -> [false: bb19, otherwise: bb18]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+ switchInt(move _12) -> [false: bb18, otherwise: bb17]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73 + switchInt(move _12) -> [false: bb14, otherwise: bb13]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
} }
- bb21: { - bb17: {
+ bb16: { + bb12: {
_0 = const 3_i32; // scope 0 at $DIR/match-arm-scopes.rs:15:59: 15:60 _0 = const 3_i32; // scope 0 at $DIR/match-arm-scopes.rs:15:59: 15:60
StorageDead(_13); // scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73 StorageDead(_13); // scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
StorageDead(_12); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78 StorageDead(_12); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78
StorageDead(_8); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78 - goto -> bb25; // scope 0 at $DIR/match-arm-scopes.rs:1:1: 1:1
StorageDead(_6); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78 + goto -> bb20; // scope 0 at $DIR/match-arm-scopes.rs:1:1: 1:1
- goto -> bb15; // scope 0 at $DIR/match-arm-scopes.rs:15:52: 15:60
+ goto -> bb11; // scope 0 at $DIR/match-arm-scopes.rs:15:52: 15:60
} }
- bb22: { - bb18: {
+ bb17: { + bb13: {
StorageDead(_12); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78 StorageDead(_12); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78
- FakeRead(ForMatchGuard, _3); // scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73 - FakeRead(ForMatchGuard, _3); // scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
- FakeRead(ForMatchGuard, _4); // scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73 - FakeRead(ForMatchGuard, _4); // scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
@ -208,82 +183,98 @@
_5 = (_2.0: bool); // scope 0 at $DIR/match-arm-scopes.rs:15:26: 15:27 _5 = (_2.0: bool); // scope 0 at $DIR/match-arm-scopes.rs:15:26: 15:27
StorageLive(_7); // scope 0 at $DIR/match-arm-scopes.rs:15:36: 15:37 StorageLive(_7); // scope 0 at $DIR/match-arm-scopes.rs:15:36: 15:37
_7 = move (_2.2: std::string::String); // scope 0 at $DIR/match-arm-scopes.rs:15:36: 15:37 _7 = move (_2.2: std::string::String); // scope 0 at $DIR/match-arm-scopes.rs:15:36: 15:37
- goto -> bb8; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6 - goto -> bb7; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
+ goto -> bb5; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6 + goto -> bb4; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
} }
- bb23: { - bb19: {
+ bb18: { + bb14: {
StorageDead(_12); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78 StorageDead(_12); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78
StorageDead(_8); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78 StorageDead(_8); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78
StorageDead(_6); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78 StorageDead(_6); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78
- falseEdge -> [real: bb5, imaginary: bb6]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73 - falseEdge -> [real: bb4, imaginary: bb5]; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+ goto -> bb3; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73 + goto -> bb2; // scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
} }
- bb24: { - bb20: {
+ bb19: { + bb15: {
StorageDead(_7); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78 StorageDead(_7); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78
StorageDead(_5); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78 StorageDead(_5); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78
StorageDead(_8); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78 StorageDead(_8); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78
StorageDead(_6); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78 StorageDead(_6); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78
- goto -> bb28; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6 - goto -> bb24; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
+ goto -> bb23; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6 + goto -> bb19; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
} }
- bb25: { - bb21: {
+ bb20: { + bb16: {
_0 = const 2_i32; // scope 2 at $DIR/match-arm-scopes.rs:16:41: 16:42 _0 = const 2_i32; // scope 2 at $DIR/match-arm-scopes.rs:16:41: 16:42
- drop(_16) -> [return: bb27, unwind: bb14]; // scope 0 at $DIR/match-arm-scopes.rs:16:41: 16:42 - drop(_16) -> [return: bb23, unwind: bb27]; // scope 0 at $DIR/match-arm-scopes.rs:16:41: 16:42
+ drop(_16) -> [return: bb22, unwind: bb10]; // scope 0 at $DIR/match-arm-scopes.rs:16:41: 16:42 + drop(_16) -> [return: bb18, unwind: bb22]; // scope 0 at $DIR/match-arm-scopes.rs:16:41: 16:42
} }
- bb26: { - bb22: {
+ bb21: { + bb17: {
StorageLive(_15); // scope 0 at $DIR/match-arm-scopes.rs:16:16: 16:17 StorageLive(_15); // scope 0 at $DIR/match-arm-scopes.rs:16:16: 16:17
_15 = (_2.1: bool); // scope 0 at $DIR/match-arm-scopes.rs:16:16: 16:17 _15 = (_2.1: bool); // scope 0 at $DIR/match-arm-scopes.rs:16:16: 16:17
StorageLive(_16); // scope 0 at $DIR/match-arm-scopes.rs:16:19: 16:20 StorageLive(_16); // scope 0 at $DIR/match-arm-scopes.rs:16:19: 16:20
_16 = move (_2.2: std::string::String); // scope 0 at $DIR/match-arm-scopes.rs:16:19: 16:20 _16 = move (_2.2: std::string::String); // scope 0 at $DIR/match-arm-scopes.rs:16:19: 16:20
- goto -> bb25; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6 - goto -> bb21; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
+ goto -> bb20; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6 + goto -> bb16; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
} }
- bb27: { - bb23: {
+ bb22: { + bb18: {
StorageDead(_16); // scope 0 at $DIR/match-arm-scopes.rs:16:41: 16:42 StorageDead(_16); // scope 0 at $DIR/match-arm-scopes.rs:16:41: 16:42
StorageDead(_15); // scope 0 at $DIR/match-arm-scopes.rs:16:41: 16:42 StorageDead(_15); // scope 0 at $DIR/match-arm-scopes.rs:16:41: 16:42
- goto -> bb28; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6 - goto -> bb24; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
+ goto -> bb23; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6 + goto -> bb19; // scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
} }
- bb28: { - bb24: {
- drop(_2) -> [return: bb13, unwind: bb1]; // scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2 - drop(_2) -> [return: bb26, unwind: bb28]; // scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
+ bb23: { + bb19: {
+ goto -> bb29; // scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2 + goto -> bb26; // scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
}
- bb25: {
+ bb20: {
StorageDead(_8); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78
StorageDead(_6); // scope 0 at $DIR/match-arm-scopes.rs:15:77: 15:78
- drop(_2) -> [return: bb26, unwind: bb28]; // scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
+ drop(_2) -> [return: bb21, unwind: bb23]; // scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
}
- bb26: {
+ bb21: {
return; // scope 0 at $DIR/match-arm-scopes.rs:18:2: 18:2
}
- bb27 (cleanup): {
- drop(_2) -> bb28; // scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
+ bb22 (cleanup): {
+ goto -> bb27; // scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
}
- bb28 (cleanup): {
+ bb23 (cleanup): {
resume; // scope 0 at $DIR/match-arm-scopes.rs:13:1: 18:2
+ } + }
+ +
+ bb24 (cleanup): { + bb24: {
+ goto -> bb1; // scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2 + goto -> bb21; // scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
+ } + }
+ +
+ bb25 (cleanup): { + bb25 (cleanup): {
+ goto -> bb24; // scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2 + goto -> bb23; // scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
+ } + }
+ +
+ bb26: { + bb26: {
+ goto -> bb9; // scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2 + goto -> bb24; // scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
+ } + }
+ +
+ bb27 (cleanup): { + bb27 (cleanup): {
+ goto -> bb1; // scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2 + goto -> bb23; // scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
+ }
+
+ bb28 (cleanup): {
+ goto -> bb27; // scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
+ }
+
+ bb29: {
+ goto -> bb26; // scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
} }
} }

View file

@ -29,31 +29,27 @@ fn full_tested_match() -> () {
_2 = Option::<i32>::Some(const 42_i32); // scope 0 at $DIR/match_false_edges.rs:15:19: 15:27 _2 = Option::<i32>::Some(const 42_i32); // scope 0 at $DIR/match_false_edges.rs:15:19: 15:27
FakeRead(ForMatchedPlace, _2); // scope 0 at $DIR/match_false_edges.rs:15:19: 15:27 FakeRead(ForMatchedPlace, _2); // scope 0 at $DIR/match_false_edges.rs:15:19: 15:27
_3 = discriminant(_2); // scope 0 at $DIR/match_false_edges.rs:16:9: 16:16 _3 = discriminant(_2); // scope 0 at $DIR/match_false_edges.rs:16:9: 16:16
switchInt(move _3) -> [0_isize: bb2, 1_isize: bb3, otherwise: bb5]; // scope 0 at $DIR/match_false_edges.rs:16:9: 16:16 switchInt(move _3) -> [0_isize: bb1, 1_isize: bb2, otherwise: bb4]; // scope 0 at $DIR/match_false_edges.rs:16:9: 16:16
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/match_false_edges.rs:14:1: 20:2 _1 = (const 3_i32, const 3_i32); // scope 0 at $DIR/match_false_edges.rs:18:17: 18:23
goto -> bb10; // scope 0 at $DIR/match_false_edges.rs:15:13: 19:6
} }
bb2: { bb2: {
_1 = (const 3_i32, const 3_i32); // scope 0 at $DIR/match_false_edges.rs:18:17: 18:23 falseEdge -> [real: bb5, imaginary: bb3]; // scope 0 at $DIR/match_false_edges.rs:16:9: 16:16
goto -> bb11; // scope 0 at $DIR/match_false_edges.rs:15:13: 19:6
} }
bb3: { bb3: {
falseEdge -> [real: bb6, imaginary: bb4]; // scope 0 at $DIR/match_false_edges.rs:16:9: 16:16 falseEdge -> [real: bb9, imaginary: bb1]; // scope 0 at $DIR/match_false_edges.rs:17:9: 17:16
} }
bb4: { bb4: {
falseEdge -> [real: bb10, imaginary: bb2]; // scope 0 at $DIR/match_false_edges.rs:17:9: 17:16
}
bb5: {
unreachable; // scope 0 at $DIR/match_false_edges.rs:15:19: 15:27 unreachable; // scope 0 at $DIR/match_false_edges.rs:15:19: 15:27
} }
bb6: { bb5: {
StorageLive(_6); // scope 0 at $DIR/match_false_edges.rs:16:14: 16:15 StorageLive(_6); // scope 0 at $DIR/match_false_edges.rs:16:14: 16:15
_11 = const full_tested_match::promoted[0]; // scope 0 at $DIR/match_false_edges.rs:16:14: 16:15 _11 = const full_tested_match::promoted[0]; // scope 0 at $DIR/match_false_edges.rs:16:14: 16:15
// ty::Const // ty::Const
@ -65,17 +61,17 @@ fn full_tested_match() -> () {
_6 = &(((*_11) as Some).0: i32); // scope 0 at $DIR/match_false_edges.rs:16:14: 16:15 _6 = &(((*_11) as Some).0: i32); // scope 0 at $DIR/match_false_edges.rs:16:14: 16:15
_4 = &shallow _2; // scope 0 at $DIR/match_false_edges.rs:15:19: 15:27 _4 = &shallow _2; // scope 0 at $DIR/match_false_edges.rs:15:19: 15:27
StorageLive(_7); // scope 0 at $DIR/match_false_edges.rs:16:20: 16:27 StorageLive(_7); // scope 0 at $DIR/match_false_edges.rs:16:20: 16:27
_7 = guard() -> [return: bb7, unwind: bb1]; // scope 0 at $DIR/match_false_edges.rs:16:20: 16:27 _7 = guard() -> [return: bb6, unwind: bb11]; // scope 0 at $DIR/match_false_edges.rs:16:20: 16:27
// mir::Constant // mir::Constant
// + span: $DIR/match_false_edges.rs:16:20: 16:25 // + span: $DIR/match_false_edges.rs:16:20: 16:25
// + literal: Const { ty: fn() -> bool {guard}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn() -> bool {guard}, val: Value(Scalar(<ZST>)) }
} }
bb7: { bb6: {
switchInt(move _7) -> [false: bb9, otherwise: bb8]; // scope 0 at $DIR/match_false_edges.rs:16:20: 16:27 switchInt(move _7) -> [false: bb8, otherwise: bb7]; // scope 0 at $DIR/match_false_edges.rs:16:20: 16:27
} }
bb8: { bb7: {
StorageDead(_7); // scope 0 at $DIR/match_false_edges.rs:16:36: 16:37 StorageDead(_7); // scope 0 at $DIR/match_false_edges.rs:16:36: 16:37
FakeRead(ForMatchGuard, _4); // scope 0 at $DIR/match_false_edges.rs:16:26: 16:27 FakeRead(ForMatchGuard, _4); // scope 0 at $DIR/match_false_edges.rs:16:26: 16:27
FakeRead(ForGuardBinding, _6); // scope 0 at $DIR/match_false_edges.rs:16:26: 16:27 FakeRead(ForGuardBinding, _6); // scope 0 at $DIR/match_false_edges.rs:16:26: 16:27
@ -87,16 +83,16 @@ fn full_tested_match() -> () {
StorageDead(_8); // scope 2 at $DIR/match_false_edges.rs:16:36: 16:37 StorageDead(_8); // scope 2 at $DIR/match_false_edges.rs:16:36: 16:37
StorageDead(_5); // scope 0 at $DIR/match_false_edges.rs:16:36: 16:37 StorageDead(_5); // scope 0 at $DIR/match_false_edges.rs:16:36: 16:37
StorageDead(_6); // scope 0 at $DIR/match_false_edges.rs:16:36: 16:37 StorageDead(_6); // scope 0 at $DIR/match_false_edges.rs:16:36: 16:37
goto -> bb11; // scope 0 at $DIR/match_false_edges.rs:15:13: 19:6 goto -> bb10; // scope 0 at $DIR/match_false_edges.rs:15:13: 19:6
}
bb8: {
StorageDead(_7); // scope 0 at $DIR/match_false_edges.rs:16:36: 16:37
StorageDead(_6); // scope 0 at $DIR/match_false_edges.rs:16:36: 16:37
goto -> bb3; // scope 0 at $DIR/match_false_edges.rs:16:20: 16:27
} }
bb9: { bb9: {
StorageDead(_7); // scope 0 at $DIR/match_false_edges.rs:16:36: 16:37
StorageDead(_6); // scope 0 at $DIR/match_false_edges.rs:16:36: 16:37
goto -> bb4; // scope 0 at $DIR/match_false_edges.rs:16:20: 16:27
}
bb10: {
StorageLive(_9); // scope 0 at $DIR/match_false_edges.rs:17:14: 17:15 StorageLive(_9); // scope 0 at $DIR/match_false_edges.rs:17:14: 17:15
_9 = ((_2 as Some).0: i32); // scope 0 at $DIR/match_false_edges.rs:17:14: 17:15 _9 = ((_2 as Some).0: i32); // scope 0 at $DIR/match_false_edges.rs:17:14: 17:15
StorageLive(_10); // scope 3 at $DIR/match_false_edges.rs:17:24: 17:25 StorageLive(_10); // scope 3 at $DIR/match_false_edges.rs:17:24: 17:25
@ -104,13 +100,17 @@ fn full_tested_match() -> () {
_1 = (const 2_i32, move _10); // scope 3 at $DIR/match_false_edges.rs:17:20: 17:26 _1 = (const 2_i32, move _10); // scope 3 at $DIR/match_false_edges.rs:17:20: 17:26
StorageDead(_10); // scope 3 at $DIR/match_false_edges.rs:17:25: 17:26 StorageDead(_10); // scope 3 at $DIR/match_false_edges.rs:17:25: 17:26
StorageDead(_9); // scope 0 at $DIR/match_false_edges.rs:17:25: 17:26 StorageDead(_9); // scope 0 at $DIR/match_false_edges.rs:17:25: 17:26
goto -> bb11; // scope 0 at $DIR/match_false_edges.rs:15:13: 19:6 goto -> bb10; // scope 0 at $DIR/match_false_edges.rs:15:13: 19:6
} }
bb11: { bb10: {
StorageDead(_2); // scope 0 at $DIR/match_false_edges.rs:19:6: 19:7 StorageDead(_2); // scope 0 at $DIR/match_false_edges.rs:19:6: 19:7
StorageDead(_1); // scope 0 at $DIR/match_false_edges.rs:19:6: 19:7 StorageDead(_1); // scope 0 at $DIR/match_false_edges.rs:19:6: 19:7
_0 = const (); // scope 0 at $DIR/match_false_edges.rs:14:28: 20:2 _0 = const (); // scope 0 at $DIR/match_false_edges.rs:14:28: 20:2
return; // scope 0 at $DIR/match_false_edges.rs:20:2: 20:2 return; // scope 0 at $DIR/match_false_edges.rs:20:2: 20:2
} }
bb11 (cleanup): {
resume; // scope 0 at $DIR/match_false_edges.rs:14:1: 20:2
}
} }

View file

@ -28,22 +28,18 @@ fn full_tested_match2() -> () {
_2 = Option::<i32>::Some(const 42_i32); // scope 0 at $DIR/match_false_edges.rs:26:19: 26:27 _2 = Option::<i32>::Some(const 42_i32); // scope 0 at $DIR/match_false_edges.rs:26:19: 26:27
FakeRead(ForMatchedPlace, _2); // scope 0 at $DIR/match_false_edges.rs:26:19: 26:27 FakeRead(ForMatchedPlace, _2); // scope 0 at $DIR/match_false_edges.rs:26:19: 26:27
_3 = discriminant(_2); // scope 0 at $DIR/match_false_edges.rs:27:9: 27:16 _3 = discriminant(_2); // scope 0 at $DIR/match_false_edges.rs:27:9: 27:16
switchInt(move _3) -> [0_isize: bb2, 1_isize: bb3, otherwise: bb5]; // scope 0 at $DIR/match_false_edges.rs:27:9: 27:16 switchInt(move _3) -> [0_isize: bb1, 1_isize: bb2, otherwise: bb4]; // scope 0 at $DIR/match_false_edges.rs:27:9: 27:16
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/match_false_edges.rs:25:1: 31:2 falseEdge -> [real: bb9, imaginary: bb3]; // scope 0 at $DIR/match_false_edges.rs:28:9: 28:13
} }
bb2: { bb2: {
falseEdge -> [real: bb10, imaginary: bb4]; // scope 0 at $DIR/match_false_edges.rs:28:9: 28:13 falseEdge -> [real: bb5, imaginary: bb1]; // scope 0 at $DIR/match_false_edges.rs:27:9: 27:16
} }
bb3: { bb3: {
falseEdge -> [real: bb6, imaginary: bb2]; // scope 0 at $DIR/match_false_edges.rs:27:9: 27:16
}
bb4: {
StorageLive(_9); // scope 0 at $DIR/match_false_edges.rs:29:14: 29:15 StorageLive(_9); // scope 0 at $DIR/match_false_edges.rs:29:14: 29:15
_9 = ((_2 as Some).0: i32); // scope 0 at $DIR/match_false_edges.rs:29:14: 29:15 _9 = ((_2 as Some).0: i32); // scope 0 at $DIR/match_false_edges.rs:29:14: 29:15
StorageLive(_10); // scope 3 at $DIR/match_false_edges.rs:29:24: 29:25 StorageLive(_10); // scope 3 at $DIR/match_false_edges.rs:29:24: 29:25
@ -51,29 +47,29 @@ fn full_tested_match2() -> () {
_1 = (const 2_i32, move _10); // scope 3 at $DIR/match_false_edges.rs:29:20: 29:26 _1 = (const 2_i32, move _10); // scope 3 at $DIR/match_false_edges.rs:29:20: 29:26
StorageDead(_10); // scope 3 at $DIR/match_false_edges.rs:29:25: 29:26 StorageDead(_10); // scope 3 at $DIR/match_false_edges.rs:29:25: 29:26
StorageDead(_9); // scope 0 at $DIR/match_false_edges.rs:29:25: 29:26 StorageDead(_9); // scope 0 at $DIR/match_false_edges.rs:29:25: 29:26
goto -> bb11; // scope 0 at $DIR/match_false_edges.rs:26:13: 30:6 goto -> bb10; // scope 0 at $DIR/match_false_edges.rs:26:13: 30:6
} }
bb5: { bb4: {
unreachable; // scope 0 at $DIR/match_false_edges.rs:26:19: 26:27 unreachable; // scope 0 at $DIR/match_false_edges.rs:26:19: 26:27
} }
bb6: { bb5: {
StorageLive(_6); // scope 0 at $DIR/match_false_edges.rs:27:14: 27:15 StorageLive(_6); // scope 0 at $DIR/match_false_edges.rs:27:14: 27:15
_6 = &((_2 as Some).0: i32); // scope 0 at $DIR/match_false_edges.rs:27:14: 27:15 _6 = &((_2 as Some).0: i32); // scope 0 at $DIR/match_false_edges.rs:27:14: 27:15
_4 = &shallow _2; // scope 0 at $DIR/match_false_edges.rs:26:19: 26:27 _4 = &shallow _2; // scope 0 at $DIR/match_false_edges.rs:26:19: 26:27
StorageLive(_7); // scope 0 at $DIR/match_false_edges.rs:27:20: 27:27 StorageLive(_7); // scope 0 at $DIR/match_false_edges.rs:27:20: 27:27
_7 = guard() -> [return: bb7, unwind: bb1]; // scope 0 at $DIR/match_false_edges.rs:27:20: 27:27 _7 = guard() -> [return: bb6, unwind: bb11]; // scope 0 at $DIR/match_false_edges.rs:27:20: 27:27
// mir::Constant // mir::Constant
// + span: $DIR/match_false_edges.rs:27:20: 27:25 // + span: $DIR/match_false_edges.rs:27:20: 27:25
// + literal: Const { ty: fn() -> bool {guard}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn() -> bool {guard}, val: Value(Scalar(<ZST>)) }
} }
bb7: { bb6: {
switchInt(move _7) -> [false: bb9, otherwise: bb8]; // scope 0 at $DIR/match_false_edges.rs:27:20: 27:27 switchInt(move _7) -> [false: bb8, otherwise: bb7]; // scope 0 at $DIR/match_false_edges.rs:27:20: 27:27
} }
bb8: { bb7: {
StorageDead(_7); // scope 0 at $DIR/match_false_edges.rs:27:36: 27:37 StorageDead(_7); // scope 0 at $DIR/match_false_edges.rs:27:36: 27:37
FakeRead(ForMatchGuard, _4); // scope 0 at $DIR/match_false_edges.rs:27:26: 27:27 FakeRead(ForMatchGuard, _4); // scope 0 at $DIR/match_false_edges.rs:27:26: 27:27
FakeRead(ForGuardBinding, _6); // scope 0 at $DIR/match_false_edges.rs:27:26: 27:27 FakeRead(ForGuardBinding, _6); // scope 0 at $DIR/match_false_edges.rs:27:26: 27:27
@ -85,24 +81,28 @@ fn full_tested_match2() -> () {
StorageDead(_8); // scope 2 at $DIR/match_false_edges.rs:27:36: 27:37 StorageDead(_8); // scope 2 at $DIR/match_false_edges.rs:27:36: 27:37
StorageDead(_5); // scope 0 at $DIR/match_false_edges.rs:27:36: 27:37 StorageDead(_5); // scope 0 at $DIR/match_false_edges.rs:27:36: 27:37
StorageDead(_6); // scope 0 at $DIR/match_false_edges.rs:27:36: 27:37 StorageDead(_6); // scope 0 at $DIR/match_false_edges.rs:27:36: 27:37
goto -> bb11; // scope 0 at $DIR/match_false_edges.rs:26:13: 30:6 goto -> bb10; // scope 0 at $DIR/match_false_edges.rs:26:13: 30:6
}
bb8: {
StorageDead(_7); // scope 0 at $DIR/match_false_edges.rs:27:36: 27:37
StorageDead(_6); // scope 0 at $DIR/match_false_edges.rs:27:36: 27:37
falseEdge -> [real: bb3, imaginary: bb1]; // scope 0 at $DIR/match_false_edges.rs:27:20: 27:27
} }
bb9: { bb9: {
StorageDead(_7); // scope 0 at $DIR/match_false_edges.rs:27:36: 27:37 _1 = (const 3_i32, const 3_i32); // scope 0 at $DIR/match_false_edges.rs:28:17: 28:23
StorageDead(_6); // scope 0 at $DIR/match_false_edges.rs:27:36: 27:37 goto -> bb10; // scope 0 at $DIR/match_false_edges.rs:26:13: 30:6
falseEdge -> [real: bb4, imaginary: bb2]; // scope 0 at $DIR/match_false_edges.rs:27:20: 27:27
} }
bb10: { bb10: {
_1 = (const 3_i32, const 3_i32); // scope 0 at $DIR/match_false_edges.rs:28:17: 28:23
goto -> bb11; // scope 0 at $DIR/match_false_edges.rs:26:13: 30:6
}
bb11: {
StorageDead(_2); // scope 0 at $DIR/match_false_edges.rs:30:6: 30:7 StorageDead(_2); // scope 0 at $DIR/match_false_edges.rs:30:6: 30:7
StorageDead(_1); // scope 0 at $DIR/match_false_edges.rs:30:6: 30:7 StorageDead(_1); // scope 0 at $DIR/match_false_edges.rs:30:6: 30:7
_0 = const (); // scope 0 at $DIR/match_false_edges.rs:25:29: 31:2 _0 = const (); // scope 0 at $DIR/match_false_edges.rs:25:29: 31:2
return; // scope 0 at $DIR/match_false_edges.rs:31:2: 31:2 return; // scope 0 at $DIR/match_false_edges.rs:31:2: 31:2
} }
bb11 (cleanup): {
resume; // scope 0 at $DIR/match_false_edges.rs:25:1: 31:2
}
} }

View file

@ -39,49 +39,45 @@ fn main() -> () {
_2 = Option::<i32>::Some(const 1_i32); // scope 0 at $DIR/match_false_edges.rs:35:19: 35:26 _2 = Option::<i32>::Some(const 1_i32); // scope 0 at $DIR/match_false_edges.rs:35:19: 35:26
FakeRead(ForMatchedPlace, _2); // scope 0 at $DIR/match_false_edges.rs:35:19: 35:26 FakeRead(ForMatchedPlace, _2); // scope 0 at $DIR/match_false_edges.rs:35:19: 35:26
_4 = discriminant(_2); // scope 0 at $DIR/match_false_edges.rs:36:9: 36:17 _4 = discriminant(_2); // scope 0 at $DIR/match_false_edges.rs:36:9: 36:17
switchInt(move _4) -> [1_isize: bb3, otherwise: bb2]; // scope 0 at $DIR/match_false_edges.rs:36:9: 36:17 switchInt(move _4) -> [1_isize: bb2, otherwise: bb1]; // scope 0 at $DIR/match_false_edges.rs:36:9: 36:17
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/match_false_edges.rs:34:1: 41:2 falseEdge -> [real: bb9, imaginary: bb4]; // scope 0 at $DIR/match_false_edges.rs:37:9: 37:11
} }
bb2: { bb2: {
falseEdge -> [real: bb10, imaginary: bb5]; // scope 0 at $DIR/match_false_edges.rs:37:9: 37:11 falseEdge -> [real: bb5, imaginary: bb1]; // scope 0 at $DIR/match_false_edges.rs:36:9: 36:17
} }
bb3: { bb3: {
falseEdge -> [real: bb6, imaginary: bb2]; // scope 0 at $DIR/match_false_edges.rs:36:9: 36:17
}
bb4: {
StorageLive(_14); // scope 0 at $DIR/match_false_edges.rs:39:9: 39:11 StorageLive(_14); // scope 0 at $DIR/match_false_edges.rs:39:9: 39:11
_14 = _2; // scope 0 at $DIR/match_false_edges.rs:39:9: 39:11 _14 = _2; // scope 0 at $DIR/match_false_edges.rs:39:9: 39:11
_1 = const 4_i32; // scope 5 at $DIR/match_false_edges.rs:39:15: 39:16 _1 = const 4_i32; // scope 5 at $DIR/match_false_edges.rs:39:15: 39:16
StorageDead(_14); // scope 0 at $DIR/match_false_edges.rs:39:15: 39:16 StorageDead(_14); // scope 0 at $DIR/match_false_edges.rs:39:15: 39:16
goto -> bb15; // scope 0 at $DIR/match_false_edges.rs:35:13: 40:6 goto -> bb14; // scope 0 at $DIR/match_false_edges.rs:35:13: 40:6
}
bb4: {
falseEdge -> [real: bb10, imaginary: bb3]; // scope 0 at $DIR/match_false_edges.rs:38:9: 38:16
} }
bb5: { bb5: {
falseEdge -> [real: bb11, imaginary: bb4]; // scope 0 at $DIR/match_false_edges.rs:38:9: 38:16
}
bb6: {
StorageLive(_7); // scope 0 at $DIR/match_false_edges.rs:36:14: 36:16 StorageLive(_7); // scope 0 at $DIR/match_false_edges.rs:36:14: 36:16
_7 = &((_2 as Some).0: i32); // scope 0 at $DIR/match_false_edges.rs:36:14: 36:16 _7 = &((_2 as Some).0: i32); // scope 0 at $DIR/match_false_edges.rs:36:14: 36:16
_5 = &shallow _2; // scope 0 at $DIR/match_false_edges.rs:35:19: 35:26 _5 = &shallow _2; // scope 0 at $DIR/match_false_edges.rs:35:19: 35:26
StorageLive(_8); // scope 0 at $DIR/match_false_edges.rs:36:21: 36:28 StorageLive(_8); // scope 0 at $DIR/match_false_edges.rs:36:21: 36:28
_8 = guard() -> [return: bb7, unwind: bb1]; // scope 0 at $DIR/match_false_edges.rs:36:21: 36:28 _8 = guard() -> [return: bb6, unwind: bb15]; // scope 0 at $DIR/match_false_edges.rs:36:21: 36:28
// mir::Constant // mir::Constant
// + span: $DIR/match_false_edges.rs:36:21: 36:26 // + span: $DIR/match_false_edges.rs:36:21: 36:26
// + literal: Const { ty: fn() -> bool {guard}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn() -> bool {guard}, val: Value(Scalar(<ZST>)) }
} }
bb7: { bb6: {
switchInt(move _8) -> [false: bb9, otherwise: bb8]; // scope 0 at $DIR/match_false_edges.rs:36:21: 36:28 switchInt(move _8) -> [false: bb8, otherwise: bb7]; // scope 0 at $DIR/match_false_edges.rs:36:21: 36:28
} }
bb8: { bb7: {
StorageDead(_8); // scope 0 at $DIR/match_false_edges.rs:36:32: 36:33 StorageDead(_8); // scope 0 at $DIR/match_false_edges.rs:36:32: 36:33
FakeRead(ForMatchGuard, _5); // scope 0 at $DIR/match_false_edges.rs:36:27: 36:28 FakeRead(ForMatchGuard, _5); // scope 0 at $DIR/match_false_edges.rs:36:27: 36:28
FakeRead(ForGuardBinding, _7); // scope 0 at $DIR/match_false_edges.rs:36:27: 36:28 FakeRead(ForGuardBinding, _7); // scope 0 at $DIR/match_false_edges.rs:36:27: 36:28
@ -90,42 +86,42 @@ fn main() -> () {
_1 = const 1_i32; // scope 2 at $DIR/match_false_edges.rs:36:32: 36:33 _1 = const 1_i32; // scope 2 at $DIR/match_false_edges.rs:36:32: 36:33
StorageDead(_6); // scope 0 at $DIR/match_false_edges.rs:36:32: 36:33 StorageDead(_6); // scope 0 at $DIR/match_false_edges.rs:36:32: 36:33
StorageDead(_7); // scope 0 at $DIR/match_false_edges.rs:36:32: 36:33 StorageDead(_7); // scope 0 at $DIR/match_false_edges.rs:36:32: 36:33
goto -> bb15; // scope 0 at $DIR/match_false_edges.rs:35:13: 40:6 goto -> bb14; // scope 0 at $DIR/match_false_edges.rs:35:13: 40:6
}
bb8: {
StorageDead(_8); // scope 0 at $DIR/match_false_edges.rs:36:32: 36:33
StorageDead(_7); // scope 0 at $DIR/match_false_edges.rs:36:32: 36:33
falseEdge -> [real: bb1, imaginary: bb1]; // scope 0 at $DIR/match_false_edges.rs:36:21: 36:28
} }
bb9: { bb9: {
StorageDead(_8); // scope 0 at $DIR/match_false_edges.rs:36:32: 36:33
StorageDead(_7); // scope 0 at $DIR/match_false_edges.rs:36:32: 36:33
falseEdge -> [real: bb2, imaginary: bb2]; // scope 0 at $DIR/match_false_edges.rs:36:21: 36:28
}
bb10: {
StorageLive(_9); // scope 0 at $DIR/match_false_edges.rs:37:9: 37:11 StorageLive(_9); // scope 0 at $DIR/match_false_edges.rs:37:9: 37:11
_9 = _2; // scope 0 at $DIR/match_false_edges.rs:37:9: 37:11 _9 = _2; // scope 0 at $DIR/match_false_edges.rs:37:9: 37:11
_1 = const 2_i32; // scope 3 at $DIR/match_false_edges.rs:37:15: 37:16 _1 = const 2_i32; // scope 3 at $DIR/match_false_edges.rs:37:15: 37:16
StorageDead(_9); // scope 0 at $DIR/match_false_edges.rs:37:15: 37:16 StorageDead(_9); // scope 0 at $DIR/match_false_edges.rs:37:15: 37:16
goto -> bb15; // scope 0 at $DIR/match_false_edges.rs:35:13: 40:6 goto -> bb14; // scope 0 at $DIR/match_false_edges.rs:35:13: 40:6
} }
bb11: { bb10: {
StorageLive(_11); // scope 0 at $DIR/match_false_edges.rs:38:14: 38:15 StorageLive(_11); // scope 0 at $DIR/match_false_edges.rs:38:14: 38:15
_11 = &((_2 as Some).0: i32); // scope 0 at $DIR/match_false_edges.rs:38:14: 38:15 _11 = &((_2 as Some).0: i32); // scope 0 at $DIR/match_false_edges.rs:38:14: 38:15
_5 = &shallow _2; // scope 0 at $DIR/match_false_edges.rs:35:19: 35:26 _5 = &shallow _2; // scope 0 at $DIR/match_false_edges.rs:35:19: 35:26
StorageLive(_12); // scope 0 at $DIR/match_false_edges.rs:38:20: 38:29 StorageLive(_12); // scope 0 at $DIR/match_false_edges.rs:38:20: 38:29
StorageLive(_13); // scope 0 at $DIR/match_false_edges.rs:38:27: 38:28 StorageLive(_13); // scope 0 at $DIR/match_false_edges.rs:38:27: 38:28
_13 = (*_11); // scope 0 at $DIR/match_false_edges.rs:38:27: 38:28 _13 = (*_11); // scope 0 at $DIR/match_false_edges.rs:38:27: 38:28
_12 = guard2(move _13) -> [return: bb12, unwind: bb1]; // scope 0 at $DIR/match_false_edges.rs:38:20: 38:29 _12 = guard2(move _13) -> [return: bb11, unwind: bb15]; // scope 0 at $DIR/match_false_edges.rs:38:20: 38:29
// mir::Constant // mir::Constant
// + span: $DIR/match_false_edges.rs:38:20: 38:26 // + span: $DIR/match_false_edges.rs:38:20: 38:26
// + literal: Const { ty: fn(i32) -> bool {guard2}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn(i32) -> bool {guard2}, val: Value(Scalar(<ZST>)) }
} }
bb12: { bb11: {
StorageDead(_13); // scope 0 at $DIR/match_false_edges.rs:38:28: 38:29 StorageDead(_13); // scope 0 at $DIR/match_false_edges.rs:38:28: 38:29
switchInt(move _12) -> [false: bb14, otherwise: bb13]; // scope 0 at $DIR/match_false_edges.rs:38:20: 38:29 switchInt(move _12) -> [false: bb13, otherwise: bb12]; // scope 0 at $DIR/match_false_edges.rs:38:20: 38:29
} }
bb13: { bb12: {
StorageDead(_12); // scope 0 at $DIR/match_false_edges.rs:38:33: 38:34 StorageDead(_12); // scope 0 at $DIR/match_false_edges.rs:38:33: 38:34
FakeRead(ForMatchGuard, _5); // scope 0 at $DIR/match_false_edges.rs:38:28: 38:29 FakeRead(ForMatchGuard, _5); // scope 0 at $DIR/match_false_edges.rs:38:28: 38:29
FakeRead(ForGuardBinding, _11); // scope 0 at $DIR/match_false_edges.rs:38:28: 38:29 FakeRead(ForGuardBinding, _11); // scope 0 at $DIR/match_false_edges.rs:38:28: 38:29
@ -134,19 +130,23 @@ fn main() -> () {
_1 = const 3_i32; // scope 4 at $DIR/match_false_edges.rs:38:33: 38:34 _1 = const 3_i32; // scope 4 at $DIR/match_false_edges.rs:38:33: 38:34
StorageDead(_10); // scope 0 at $DIR/match_false_edges.rs:38:33: 38:34 StorageDead(_10); // scope 0 at $DIR/match_false_edges.rs:38:33: 38:34
StorageDead(_11); // scope 0 at $DIR/match_false_edges.rs:38:33: 38:34 StorageDead(_11); // scope 0 at $DIR/match_false_edges.rs:38:33: 38:34
goto -> bb15; // scope 0 at $DIR/match_false_edges.rs:35:13: 40:6 goto -> bb14; // scope 0 at $DIR/match_false_edges.rs:35:13: 40:6
}
bb13: {
StorageDead(_12); // scope 0 at $DIR/match_false_edges.rs:38:33: 38:34
StorageDead(_11); // scope 0 at $DIR/match_false_edges.rs:38:33: 38:34
falseEdge -> [real: bb3, imaginary: bb3]; // scope 0 at $DIR/match_false_edges.rs:38:20: 38:29
} }
bb14: { bb14: {
StorageDead(_12); // scope 0 at $DIR/match_false_edges.rs:38:33: 38:34
StorageDead(_11); // scope 0 at $DIR/match_false_edges.rs:38:33: 38:34
falseEdge -> [real: bb4, imaginary: bb4]; // scope 0 at $DIR/match_false_edges.rs:38:20: 38:29
}
bb15: {
StorageDead(_2); // scope 0 at $DIR/match_false_edges.rs:40:6: 40:7 StorageDead(_2); // scope 0 at $DIR/match_false_edges.rs:40:6: 40:7
StorageDead(_1); // scope 0 at $DIR/match_false_edges.rs:40:6: 40:7 StorageDead(_1); // scope 0 at $DIR/match_false_edges.rs:40:6: 40:7
_0 = const (); // scope 0 at $DIR/match_false_edges.rs:34:11: 41:2 _0 = const (); // scope 0 at $DIR/match_false_edges.rs:34:11: 41:2
return; // scope 0 at $DIR/match_false_edges.rs:41:2: 41:2 return; // scope 0 at $DIR/match_false_edges.rs:41:2: 41:2
} }
bb15 (cleanup): {
resume; // scope 0 at $DIR/match_false_edges.rs:34:1: 41:2
}
} }

View file

@ -5,21 +5,21 @@
| '_#1r | Local | ['_#1r] | '_#1r | Local | ['_#1r]
| |
| Inferred Region Values | Inferred Region Values
| '_#0r | U0 | {bb0[0..=8], bb1[0], bb2[0..=8], bb3[0], bb4[0..=1], bb5[0..=3], bb6[0..=3], bb7[0..=2], bb8[0..=5], '_#0r, '_#1r} | '_#0r | U0 | {bb0[0..=8], bb1[0..=8], bb2[0], bb3[0..=1], bb4[0..=3], bb5[0..=3], bb6[0..=2], bb7[0..=5], bb8[0], '_#0r, '_#1r}
| '_#1r | U0 | {bb0[0..=8], bb1[0], bb2[0..=8], bb3[0], bb4[0..=1], bb5[0..=3], bb6[0..=3], bb7[0..=2], bb8[0..=5], '_#1r} | '_#1r | U0 | {bb0[0..=8], bb1[0..=8], bb2[0], bb3[0..=1], bb4[0..=3], bb5[0..=3], bb6[0..=2], bb7[0..=5], bb8[0], '_#1r}
| '_#2r | U0 | {} | '_#2r | U0 | {}
| '_#3r | U0 | {bb2[0..=8], bb3[0], bb5[0..=2]} | '_#3r | U0 | {bb1[0..=8], bb2[0], bb4[0..=2]}
| '_#4r | U0 | {bb2[1..=8], bb3[0], bb5[0..=2]} | '_#4r | U0 | {bb1[1..=8], bb2[0], bb4[0..=2]}
| '_#5r | U0 | {bb2[4..=8], bb3[0], bb5[0..=2]} | '_#5r | U0 | {bb1[4..=8], bb2[0], bb4[0..=2]}
| |
| Inference Constraints | Inference Constraints
| '_#0r live at {bb0[0..=8], bb1[0], bb2[0..=8], bb3[0], bb4[0..=1], bb5[0..=3], bb6[0..=3], bb7[0..=2], bb8[0..=5]} | '_#0r live at {bb0[0..=8], bb1[0..=8], bb2[0], bb3[0..=1], bb4[0..=3], bb5[0..=3], bb6[0..=2], bb7[0..=5], bb8[0]}
| '_#1r live at {bb0[0..=8], bb1[0], bb2[0..=8], bb3[0], bb4[0..=1], bb5[0..=3], bb6[0..=3], bb7[0..=2], bb8[0..=5]} | '_#1r live at {bb0[0..=8], bb1[0..=8], bb2[0], bb3[0..=1], bb4[0..=3], bb5[0..=3], bb6[0..=2], bb7[0..=5], bb8[0]}
| '_#3r live at {bb2[0]} | '_#3r live at {bb1[0]}
| '_#4r live at {bb2[1..=3]} | '_#4r live at {bb1[1..=3]}
| '_#5r live at {bb2[4..=8], bb3[0], bb5[0..=2]} | '_#5r live at {bb1[4..=8], bb2[0], bb4[0..=2]}
| '_#3r: '_#4r due to Assignment at Single(bb2[0]) | '_#3r: '_#4r due to Assignment at Single(bb1[0])
| '_#4r: '_#5r due to Assignment at Single(bb2[3]) | '_#4r: '_#5r due to Assignment at Single(bb1[3])
| |
fn main() -> () { fn main() -> () {
let mut _0: (); // return place in scope 0 at $DIR/region-subtyping-basic.rs:16:11: 16:11 let mut _0: (); // return place in scope 0 at $DIR/region-subtyping-basic.rs:16:11: 16:11
@ -52,66 +52,66 @@ fn main() -> () {
_3 = const Const(Value(Scalar(0x00000000)): usize); // bb0[5]: scope 1 at $DIR/region-subtyping-basic.rs:18:16: 18:17 _3 = const Const(Value(Scalar(0x00000000)): usize); // bb0[5]: scope 1 at $DIR/region-subtyping-basic.rs:18:16: 18:17
_4 = Len(_1); // bb0[6]: scope 1 at $DIR/region-subtyping-basic.rs:18:14: 18:18 _4 = Len(_1); // bb0[6]: scope 1 at $DIR/region-subtyping-basic.rs:18:14: 18:18
_5 = Lt(_3, _4); // bb0[7]: scope 1 at $DIR/region-subtyping-basic.rs:18:14: 18:18 _5 = Lt(_3, _4); // bb0[7]: scope 1 at $DIR/region-subtyping-basic.rs:18:14: 18:18
assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb2, unwind: bb1]; // bb0[8]: scope 1 at $DIR/region-subtyping-basic.rs:18:14: 18:18 assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind: bb8]; // bb0[8]: scope 1 at $DIR/region-subtyping-basic.rs:18:14: 18:18
} }
bb1 (cleanup): { bb1: {
resume; // bb1[0]: scope 0 at $DIR/region-subtyping-basic.rs:16:1: 25:2 _2 = &'_#3r _1[_3]; // bb1[0]: scope 1 at $DIR/region-subtyping-basic.rs:18:13: 18:18
FakeRead(ForLet, _2); // bb1[1]: scope 1 at $DIR/region-subtyping-basic.rs:18:9: 18:10
StorageLive(_6); // bb1[2]: scope 2 at $DIR/region-subtyping-basic.rs:19:9: 19:10
_6 = _2; // bb1[3]: scope 2 at $DIR/region-subtyping-basic.rs:19:13: 19:14
FakeRead(ForLet, _6); // bb1[4]: scope 2 at $DIR/region-subtyping-basic.rs:19:9: 19:10
StorageLive(_7); // bb1[5]: scope 3 at $DIR/region-subtyping-basic.rs:20:8: 20:12
_7 = const Const(Value(Scalar(0x01)): bool); // bb1[6]: scope 3 at $DIR/region-subtyping-basic.rs:20:8: 20:12
FakeRead(ForMatchedPlace, _7); // bb1[7]: scope 3 at $DIR/region-subtyping-basic.rs:20:8: 20:12
switchInt(_7) -> [Const(Value(Scalar(0x00)): bool): bb3, otherwise: bb2]; // bb1[8]: scope 3 at $DIR/region-subtyping-basic.rs:20:5: 24:6
} }
bb2: { bb2: {
_2 = &'_#3r _1[_3]; // bb2[0]: scope 1 at $DIR/region-subtyping-basic.rs:18:13: 18:18 falseEdge -> [real: bb4, imaginary: bb3]; // bb2[0]: scope 3 at $DIR/region-subtyping-basic.rs:20:5: 24:6
FakeRead(ForLet, _2); // bb2[1]: scope 1 at $DIR/region-subtyping-basic.rs:18:9: 18:10
StorageLive(_6); // bb2[2]: scope 2 at $DIR/region-subtyping-basic.rs:19:9: 19:10
_6 = _2; // bb2[3]: scope 2 at $DIR/region-subtyping-basic.rs:19:13: 19:14
FakeRead(ForLet, _6); // bb2[4]: scope 2 at $DIR/region-subtyping-basic.rs:19:9: 19:10
StorageLive(_7); // bb2[5]: scope 3 at $DIR/region-subtyping-basic.rs:20:8: 20:12
_7 = const Const(Value(Scalar(0x01)): bool); // bb2[6]: scope 3 at $DIR/region-subtyping-basic.rs:20:8: 20:12
FakeRead(ForMatchedPlace, _7); // bb2[7]: scope 3 at $DIR/region-subtyping-basic.rs:20:8: 20:12
switchInt(_7) -> [Const(Value(Scalar(0x00)): bool): bb4, otherwise: bb3]; // bb2[8]: scope 3 at $DIR/region-subtyping-basic.rs:20:5: 24:6
} }
bb3: { bb3: {
falseEdge -> [real: bb5, imaginary: bb4]; // bb3[0]: scope 3 at $DIR/region-subtyping-basic.rs:20:5: 24:6 StorageLive(_10); // bb3[0]: scope 3 at $DIR/region-subtyping-basic.rs:23:9: 23:18
} _10 = Const(Value(Scalar(<ZST>)): fn(usize) -> bool {use_x})(const Const(Value(Scalar(0x00000016)): usize)) -> [return: bb6, unwind: bb8]; // bb3[1]: scope 3 at $DIR/region-subtyping-basic.rs:23:9: 23:18
bb4: {
StorageLive(_10); // bb4[0]: scope 3 at $DIR/region-subtyping-basic.rs:23:9: 23:18
_10 = Const(Value(Scalar(<ZST>)): fn(usize) -> bool {use_x})(const Const(Value(Scalar(0x00000016)): usize)) -> [return: bb7, unwind: bb1]; // bb4[1]: scope 3 at $DIR/region-subtyping-basic.rs:23:9: 23:18
// mir::Constant // mir::Constant
// + span: $DIR/region-subtyping-basic.rs:23:9: 23:14 // + span: $DIR/region-subtyping-basic.rs:23:9: 23:14
// + literal: Const { ty: fn(usize) -> bool {use_x}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn(usize) -> bool {use_x}, val: Value(Scalar(<ZST>)) }
} }
bb5: { bb4: {
StorageLive(_8); // bb5[0]: scope 3 at $DIR/region-subtyping-basic.rs:21:9: 21:18 StorageLive(_8); // bb4[0]: scope 3 at $DIR/region-subtyping-basic.rs:21:9: 21:18
StorageLive(_9); // bb5[1]: scope 3 at $DIR/region-subtyping-basic.rs:21:15: 21:17 StorageLive(_9); // bb4[1]: scope 3 at $DIR/region-subtyping-basic.rs:21:15: 21:17
_9 = (*_6); // bb5[2]: scope 3 at $DIR/region-subtyping-basic.rs:21:15: 21:17 _9 = (*_6); // bb4[2]: scope 3 at $DIR/region-subtyping-basic.rs:21:15: 21:17
_8 = Const(Value(Scalar(<ZST>)): fn(usize) -> bool {use_x})(move _9) -> [return: bb6, unwind: bb1]; // bb5[3]: scope 3 at $DIR/region-subtyping-basic.rs:21:9: 21:18 _8 = Const(Value(Scalar(<ZST>)): fn(usize) -> bool {use_x})(move _9) -> [return: bb5, unwind: bb8]; // bb4[3]: scope 3 at $DIR/region-subtyping-basic.rs:21:9: 21:18
// mir::Constant // mir::Constant
// + span: $DIR/region-subtyping-basic.rs:21:9: 21:14 // + span: $DIR/region-subtyping-basic.rs:21:9: 21:14
// + literal: Const { ty: fn(usize) -> bool {use_x}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn(usize) -> bool {use_x}, val: Value(Scalar(<ZST>)) }
} }
bb5: {
StorageDead(_9); // bb5[0]: scope 3 at $DIR/region-subtyping-basic.rs:21:17: 21:18
StorageDead(_8); // bb5[1]: scope 3 at $DIR/region-subtyping-basic.rs:21:18: 21:19
_0 = const Const(Value(Scalar(<ZST>)): ()); // bb5[2]: scope 3 at $DIR/region-subtyping-basic.rs:20:13: 22:6
goto -> bb7; // bb5[3]: scope 3 at $DIR/region-subtyping-basic.rs:20:5: 24:6
}
bb6: { bb6: {
StorageDead(_9); // bb6[0]: scope 3 at $DIR/region-subtyping-basic.rs:21:17: 21:18 StorageDead(_10); // bb6[0]: scope 3 at $DIR/region-subtyping-basic.rs:23:18: 23:19
StorageDead(_8); // bb6[1]: scope 3 at $DIR/region-subtyping-basic.rs:21:18: 21:19 _0 = const Const(Value(Scalar(<ZST>)): ()); // bb6[1]: scope 3 at $DIR/region-subtyping-basic.rs:22:12: 24:6
_0 = const Const(Value(Scalar(<ZST>)): ()); // bb6[2]: scope 3 at $DIR/region-subtyping-basic.rs:20:13: 22:6 goto -> bb7; // bb6[2]: scope 3 at $DIR/region-subtyping-basic.rs:20:5: 24:6
goto -> bb8; // bb6[3]: scope 3 at $DIR/region-subtyping-basic.rs:20:5: 24:6
} }
bb7: { bb7: {
StorageDead(_10); // bb7[0]: scope 3 at $DIR/region-subtyping-basic.rs:23:18: 23:19 StorageDead(_6); // bb7[0]: scope 2 at $DIR/region-subtyping-basic.rs:25:1: 25:2
_0 = const Const(Value(Scalar(<ZST>)): ()); // bb7[1]: scope 3 at $DIR/region-subtyping-basic.rs:22:12: 24:6 StorageDead(_3); // bb7[1]: scope 1 at $DIR/region-subtyping-basic.rs:25:1: 25:2
goto -> bb8; // bb7[2]: scope 3 at $DIR/region-subtyping-basic.rs:20:5: 24:6 StorageDead(_2); // bb7[2]: scope 1 at $DIR/region-subtyping-basic.rs:25:1: 25:2
StorageDead(_1); // bb7[3]: scope 0 at $DIR/region-subtyping-basic.rs:25:1: 25:2
StorageDead(_7); // bb7[4]: scope 0 at $DIR/region-subtyping-basic.rs:25:1: 25:2
return; // bb7[5]: scope 0 at $DIR/region-subtyping-basic.rs:25:2: 25:2
} }
bb8: { bb8 (cleanup): {
StorageDead(_6); // bb8[0]: scope 2 at $DIR/region-subtyping-basic.rs:25:1: 25:2 resume; // bb8[0]: scope 0 at $DIR/region-subtyping-basic.rs:16:1: 25:2
StorageDead(_3); // bb8[1]: scope 1 at $DIR/region-subtyping-basic.rs:25:1: 25:2
StorageDead(_2); // bb8[2]: scope 1 at $DIR/region-subtyping-basic.rs:25:1: 25:2
StorageDead(_1); // bb8[3]: scope 0 at $DIR/region-subtyping-basic.rs:25:1: 25:2
StorageDead(_7); // bb8[4]: scope 0 at $DIR/region-subtyping-basic.rs:25:1: 25:2
return; // bb8[5]: scope 0 at $DIR/region-subtyping-basic.rs:25:2: 25:2
} }
} }

View file

@ -5,21 +5,21 @@
| '_#1r | Local | ['_#1r] | '_#1r | Local | ['_#1r]
| |
| Inferred Region Values | Inferred Region Values
| '_#0r | U0 | {bb0[0..=8], bb1[0], bb2[0..=8], bb3[0], bb4[0..=1], bb5[0..=3], bb6[0..=3], bb7[0..=2], bb8[0..=5], '_#0r, '_#1r} | '_#0r | U0 | {bb0[0..=8], bb1[0..=8], bb2[0], bb3[0..=1], bb4[0..=3], bb5[0..=3], bb6[0..=2], bb7[0..=5], bb8[0], '_#0r, '_#1r}
| '_#1r | U0 | {bb0[0..=8], bb1[0], bb2[0..=8], bb3[0], bb4[0..=1], bb5[0..=3], bb6[0..=3], bb7[0..=2], bb8[0..=5], '_#1r} | '_#1r | U0 | {bb0[0..=8], bb1[0..=8], bb2[0], bb3[0..=1], bb4[0..=3], bb5[0..=3], bb6[0..=2], bb7[0..=5], bb8[0], '_#1r}
| '_#2r | U0 | {} | '_#2r | U0 | {}
| '_#3r | U0 | {bb2[0..=8], bb3[0], bb5[0..=2]} | '_#3r | U0 | {bb1[0..=8], bb2[0], bb4[0..=2]}
| '_#4r | U0 | {bb2[1..=8], bb3[0], bb5[0..=2]} | '_#4r | U0 | {bb1[1..=8], bb2[0], bb4[0..=2]}
| '_#5r | U0 | {bb2[4..=8], bb3[0], bb5[0..=2]} | '_#5r | U0 | {bb1[4..=8], bb2[0], bb4[0..=2]}
| |
| Inference Constraints | Inference Constraints
| '_#0r live at {bb0[0..=8], bb1[0], bb2[0..=8], bb3[0], bb4[0..=1], bb5[0..=3], bb6[0..=3], bb7[0..=2], bb8[0..=5]} | '_#0r live at {bb0[0..=8], bb1[0..=8], bb2[0], bb3[0..=1], bb4[0..=3], bb5[0..=3], bb6[0..=2], bb7[0..=5], bb8[0]}
| '_#1r live at {bb0[0..=8], bb1[0], bb2[0..=8], bb3[0], bb4[0..=1], bb5[0..=3], bb6[0..=3], bb7[0..=2], bb8[0..=5]} | '_#1r live at {bb0[0..=8], bb1[0..=8], bb2[0], bb3[0..=1], bb4[0..=3], bb5[0..=3], bb6[0..=2], bb7[0..=5], bb8[0]}
| '_#3r live at {bb2[0]} | '_#3r live at {bb1[0]}
| '_#4r live at {bb2[1..=3]} | '_#4r live at {bb1[1..=3]}
| '_#5r live at {bb2[4..=8], bb3[0], bb5[0..=2]} | '_#5r live at {bb1[4..=8], bb2[0], bb4[0..=2]}
| '_#3r: '_#4r due to Assignment at Single(bb2[0]) | '_#3r: '_#4r due to Assignment at Single(bb1[0])
| '_#4r: '_#5r due to Assignment at Single(bb2[3]) | '_#4r: '_#5r due to Assignment at Single(bb1[3])
| |
fn main() -> () { fn main() -> () {
let mut _0: (); // return place in scope 0 at $DIR/region-subtyping-basic.rs:16:11: 16:11 let mut _0: (); // return place in scope 0 at $DIR/region-subtyping-basic.rs:16:11: 16:11
@ -52,66 +52,66 @@ fn main() -> () {
_3 = const Const(Value(Scalar(0x0000000000000000)): usize); // bb0[5]: scope 1 at $DIR/region-subtyping-basic.rs:18:16: 18:17 _3 = const Const(Value(Scalar(0x0000000000000000)): usize); // bb0[5]: scope 1 at $DIR/region-subtyping-basic.rs:18:16: 18:17
_4 = Len(_1); // bb0[6]: scope 1 at $DIR/region-subtyping-basic.rs:18:14: 18:18 _4 = Len(_1); // bb0[6]: scope 1 at $DIR/region-subtyping-basic.rs:18:14: 18:18
_5 = Lt(_3, _4); // bb0[7]: scope 1 at $DIR/region-subtyping-basic.rs:18:14: 18:18 _5 = Lt(_3, _4); // bb0[7]: scope 1 at $DIR/region-subtyping-basic.rs:18:14: 18:18
assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb2, unwind: bb1]; // bb0[8]: scope 1 at $DIR/region-subtyping-basic.rs:18:14: 18:18 assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind: bb8]; // bb0[8]: scope 1 at $DIR/region-subtyping-basic.rs:18:14: 18:18
} }
bb1 (cleanup): { bb1: {
resume; // bb1[0]: scope 0 at $DIR/region-subtyping-basic.rs:16:1: 25:2 _2 = &'_#3r _1[_3]; // bb1[0]: scope 1 at $DIR/region-subtyping-basic.rs:18:13: 18:18
FakeRead(ForLet, _2); // bb1[1]: scope 1 at $DIR/region-subtyping-basic.rs:18:9: 18:10
StorageLive(_6); // bb1[2]: scope 2 at $DIR/region-subtyping-basic.rs:19:9: 19:10
_6 = _2; // bb1[3]: scope 2 at $DIR/region-subtyping-basic.rs:19:13: 19:14
FakeRead(ForLet, _6); // bb1[4]: scope 2 at $DIR/region-subtyping-basic.rs:19:9: 19:10
StorageLive(_7); // bb1[5]: scope 3 at $DIR/region-subtyping-basic.rs:20:8: 20:12
_7 = const Const(Value(Scalar(0x01)): bool); // bb1[6]: scope 3 at $DIR/region-subtyping-basic.rs:20:8: 20:12
FakeRead(ForMatchedPlace, _7); // bb1[7]: scope 3 at $DIR/region-subtyping-basic.rs:20:8: 20:12
switchInt(_7) -> [Const(Value(Scalar(0x00)): bool): bb3, otherwise: bb2]; // bb1[8]: scope 3 at $DIR/region-subtyping-basic.rs:20:5: 24:6
} }
bb2: { bb2: {
_2 = &'_#3r _1[_3]; // bb2[0]: scope 1 at $DIR/region-subtyping-basic.rs:18:13: 18:18 falseEdge -> [real: bb4, imaginary: bb3]; // bb2[0]: scope 3 at $DIR/region-subtyping-basic.rs:20:5: 24:6
FakeRead(ForLet, _2); // bb2[1]: scope 1 at $DIR/region-subtyping-basic.rs:18:9: 18:10
StorageLive(_6); // bb2[2]: scope 2 at $DIR/region-subtyping-basic.rs:19:9: 19:10
_6 = _2; // bb2[3]: scope 2 at $DIR/region-subtyping-basic.rs:19:13: 19:14
FakeRead(ForLet, _6); // bb2[4]: scope 2 at $DIR/region-subtyping-basic.rs:19:9: 19:10
StorageLive(_7); // bb2[5]: scope 3 at $DIR/region-subtyping-basic.rs:20:8: 20:12
_7 = const Const(Value(Scalar(0x01)): bool); // bb2[6]: scope 3 at $DIR/region-subtyping-basic.rs:20:8: 20:12
FakeRead(ForMatchedPlace, _7); // bb2[7]: scope 3 at $DIR/region-subtyping-basic.rs:20:8: 20:12
switchInt(_7) -> [Const(Value(Scalar(0x00)): bool): bb4, otherwise: bb3]; // bb2[8]: scope 3 at $DIR/region-subtyping-basic.rs:20:5: 24:6
} }
bb3: { bb3: {
falseEdge -> [real: bb5, imaginary: bb4]; // bb3[0]: scope 3 at $DIR/region-subtyping-basic.rs:20:5: 24:6 StorageLive(_10); // bb3[0]: scope 3 at $DIR/region-subtyping-basic.rs:23:9: 23:18
} _10 = Const(Value(Scalar(<ZST>)): fn(usize) -> bool {use_x})(const Const(Value(Scalar(0x0000000000000016)): usize)) -> [return: bb6, unwind: bb8]; // bb3[1]: scope 3 at $DIR/region-subtyping-basic.rs:23:9: 23:18
bb4: {
StorageLive(_10); // bb4[0]: scope 3 at $DIR/region-subtyping-basic.rs:23:9: 23:18
_10 = Const(Value(Scalar(<ZST>)): fn(usize) -> bool {use_x})(const Const(Value(Scalar(0x0000000000000016)): usize)) -> [return: bb7, unwind: bb1]; // bb4[1]: scope 3 at $DIR/region-subtyping-basic.rs:23:9: 23:18
// mir::Constant // mir::Constant
// + span: $DIR/region-subtyping-basic.rs:23:9: 23:14 // + span: $DIR/region-subtyping-basic.rs:23:9: 23:14
// + literal: Const { ty: fn(usize) -> bool {use_x}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn(usize) -> bool {use_x}, val: Value(Scalar(<ZST>)) }
} }
bb5: { bb4: {
StorageLive(_8); // bb5[0]: scope 3 at $DIR/region-subtyping-basic.rs:21:9: 21:18 StorageLive(_8); // bb4[0]: scope 3 at $DIR/region-subtyping-basic.rs:21:9: 21:18
StorageLive(_9); // bb5[1]: scope 3 at $DIR/region-subtyping-basic.rs:21:15: 21:17 StorageLive(_9); // bb4[1]: scope 3 at $DIR/region-subtyping-basic.rs:21:15: 21:17
_9 = (*_6); // bb5[2]: scope 3 at $DIR/region-subtyping-basic.rs:21:15: 21:17 _9 = (*_6); // bb4[2]: scope 3 at $DIR/region-subtyping-basic.rs:21:15: 21:17
_8 = Const(Value(Scalar(<ZST>)): fn(usize) -> bool {use_x})(move _9) -> [return: bb6, unwind: bb1]; // bb5[3]: scope 3 at $DIR/region-subtyping-basic.rs:21:9: 21:18 _8 = Const(Value(Scalar(<ZST>)): fn(usize) -> bool {use_x})(move _9) -> [return: bb5, unwind: bb8]; // bb4[3]: scope 3 at $DIR/region-subtyping-basic.rs:21:9: 21:18
// mir::Constant // mir::Constant
// + span: $DIR/region-subtyping-basic.rs:21:9: 21:14 // + span: $DIR/region-subtyping-basic.rs:21:9: 21:14
// + literal: Const { ty: fn(usize) -> bool {use_x}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn(usize) -> bool {use_x}, val: Value(Scalar(<ZST>)) }
} }
bb5: {
StorageDead(_9); // bb5[0]: scope 3 at $DIR/region-subtyping-basic.rs:21:17: 21:18
StorageDead(_8); // bb5[1]: scope 3 at $DIR/region-subtyping-basic.rs:21:18: 21:19
_0 = const Const(Value(Scalar(<ZST>)): ()); // bb5[2]: scope 3 at $DIR/region-subtyping-basic.rs:20:13: 22:6
goto -> bb7; // bb5[3]: scope 3 at $DIR/region-subtyping-basic.rs:20:5: 24:6
}
bb6: { bb6: {
StorageDead(_9); // bb6[0]: scope 3 at $DIR/region-subtyping-basic.rs:21:17: 21:18 StorageDead(_10); // bb6[0]: scope 3 at $DIR/region-subtyping-basic.rs:23:18: 23:19
StorageDead(_8); // bb6[1]: scope 3 at $DIR/region-subtyping-basic.rs:21:18: 21:19 _0 = const Const(Value(Scalar(<ZST>)): ()); // bb6[1]: scope 3 at $DIR/region-subtyping-basic.rs:22:12: 24:6
_0 = const Const(Value(Scalar(<ZST>)): ()); // bb6[2]: scope 3 at $DIR/region-subtyping-basic.rs:20:13: 22:6 goto -> bb7; // bb6[2]: scope 3 at $DIR/region-subtyping-basic.rs:20:5: 24:6
goto -> bb8; // bb6[3]: scope 3 at $DIR/region-subtyping-basic.rs:20:5: 24:6
} }
bb7: { bb7: {
StorageDead(_10); // bb7[0]: scope 3 at $DIR/region-subtyping-basic.rs:23:18: 23:19 StorageDead(_6); // bb7[0]: scope 2 at $DIR/region-subtyping-basic.rs:25:1: 25:2
_0 = const Const(Value(Scalar(<ZST>)): ()); // bb7[1]: scope 3 at $DIR/region-subtyping-basic.rs:22:12: 24:6 StorageDead(_3); // bb7[1]: scope 1 at $DIR/region-subtyping-basic.rs:25:1: 25:2
goto -> bb8; // bb7[2]: scope 3 at $DIR/region-subtyping-basic.rs:20:5: 24:6 StorageDead(_2); // bb7[2]: scope 1 at $DIR/region-subtyping-basic.rs:25:1: 25:2
StorageDead(_1); // bb7[3]: scope 0 at $DIR/region-subtyping-basic.rs:25:1: 25:2
StorageDead(_7); // bb7[4]: scope 0 at $DIR/region-subtyping-basic.rs:25:1: 25:2
return; // bb7[5]: scope 0 at $DIR/region-subtyping-basic.rs:25:2: 25:2
} }
bb8: { bb8 (cleanup): {
StorageDead(_6); // bb8[0]: scope 2 at $DIR/region-subtyping-basic.rs:25:1: 25:2 resume; // bb8[0]: scope 0 at $DIR/region-subtyping-basic.rs:16:1: 25:2
StorageDead(_3); // bb8[1]: scope 1 at $DIR/region-subtyping-basic.rs:25:1: 25:2
StorageDead(_2); // bb8[2]: scope 1 at $DIR/region-subtyping-basic.rs:25:1: 25:2
StorageDead(_1); // bb8[3]: scope 0 at $DIR/region-subtyping-basic.rs:25:1: 25:2
StorageDead(_7); // bb8[4]: scope 0 at $DIR/region-subtyping-basic.rs:25:1: 25:2
return; // bb8[5]: scope 0 at $DIR/region-subtyping-basic.rs:25:2: 25:2
} }
} }

View file

@ -41,12 +41,12 @@ fn unwrap(_1: Option<T>) -> T {
_3 = move ((_1 as Some).0: T); // scope 0 at $DIR/no-drop-for-inactive-variant.rs:9:14: 9:15 _3 = move ((_1 as Some).0: T); // scope 0 at $DIR/no-drop-for-inactive-variant.rs:9:14: 9:15
_0 = move _3; // scope 1 at $DIR/no-drop-for-inactive-variant.rs:9:20: 9:21 _0 = move _3; // scope 1 at $DIR/no-drop-for-inactive-variant.rs:9:20: 9:21
StorageDead(_3); // scope 0 at $DIR/no-drop-for-inactive-variant.rs:9:20: 9:21 StorageDead(_3); // scope 0 at $DIR/no-drop-for-inactive-variant.rs:9:20: 9:21
_6 = discriminant(_1); // scope 0 at $DIR/no-drop-for-inactive-variant.rs:12:1: 12:2 _5 = discriminant(_1); // scope 0 at $DIR/no-drop-for-inactive-variant.rs:12:1: 12:2
return; // scope 0 at $DIR/no-drop-for-inactive-variant.rs:12:2: 12:2 return; // scope 0 at $DIR/no-drop-for-inactive-variant.rs:12:2: 12:2
} }
bb4 (cleanup): { bb4 (cleanup): {
_5 = discriminant(_1); // scope 0 at $DIR/no-drop-for-inactive-variant.rs:12:1: 12:2 _7 = discriminant(_1); // scope 0 at $DIR/no-drop-for-inactive-variant.rs:12:1: 12:2
resume; // scope 0 at $DIR/no-drop-for-inactive-variant.rs:7:1: 12:2 resume; // scope 0 at $DIR/no-drop-for-inactive-variant.rs:7:1: 12:2
} }
} }

View file

@ -20,25 +20,21 @@ fn main() -> () {
// + span: $DIR/no-spurious-drop-after-call.rs:9:20: 9:22 // + span: $DIR/no-spurious-drop-after-call.rs:9:20: 9:22
// + literal: Const { ty: &str, val: Value(Slice { data: Allocation { bytes: [], relocations: Relocations(SortedMap { data: [] }), init_mask: InitMask { blocks: [], len: Size { raw: 0 } }, size: Size { raw: 0 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 0 }) } // + literal: Const { ty: &str, val: Value(Slice { data: Allocation { bytes: [], relocations: Relocations(SortedMap { data: [] }), init_mask: InitMask { blocks: [], len: Size { raw: 0 } }, size: Size { raw: 0 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 0 }) }
_3 = &(*_4); // scope 0 at $DIR/no-spurious-drop-after-call.rs:9:20: 9:22 _3 = &(*_4); // scope 0 at $DIR/no-spurious-drop-after-call.rs:9:20: 9:22
_2 = <str as ToString>::to_string(move _3) -> bb2; // scope 0 at $DIR/no-spurious-drop-after-call.rs:9:20: 9:34 _2 = <str as ToString>::to_string(move _3) -> bb1; // scope 0 at $DIR/no-spurious-drop-after-call.rs:9:20: 9:34
// mir::Constant // mir::Constant
// + span: $DIR/no-spurious-drop-after-call.rs:9:23: 9:32 // + span: $DIR/no-spurious-drop-after-call.rs:9:23: 9:32
// + literal: Const { ty: for<'r> fn(&'r str) -> std::string::String {<str as std::string::ToString>::to_string}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: for<'r> fn(&'r str) -> std::string::String {<str as std::string::ToString>::to_string}, val: Value(Scalar(<ZST>)) }
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/no-spurious-drop-after-call.rs:8:1: 10:2
}
bb2: {
StorageDead(_3); // scope 0 at $DIR/no-spurious-drop-after-call.rs:9:33: 9:34 StorageDead(_3); // scope 0 at $DIR/no-spurious-drop-after-call.rs:9:33: 9:34
_1 = std::mem::drop::<String>(move _2) -> [return: bb3, unwind: bb4]; // scope 0 at $DIR/no-spurious-drop-after-call.rs:9:5: 9:35 _1 = std::mem::drop::<String>(move _2) -> [return: bb2, unwind: bb3]; // scope 0 at $DIR/no-spurious-drop-after-call.rs:9:5: 9:35
// mir::Constant // mir::Constant
// + span: $DIR/no-spurious-drop-after-call.rs:9:5: 9:19 // + span: $DIR/no-spurious-drop-after-call.rs:9:5: 9:19
// + literal: Const { ty: fn(std::string::String) {std::mem::drop::<std::string::String>}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn(std::string::String) {std::mem::drop::<std::string::String>}, val: Value(Scalar(<ZST>)) }
} }
bb3: { bb2: {
StorageDead(_2); // scope 0 at $DIR/no-spurious-drop-after-call.rs:9:34: 9:35 StorageDead(_2); // scope 0 at $DIR/no-spurious-drop-after-call.rs:9:34: 9:35
StorageDead(_4); // scope 0 at $DIR/no-spurious-drop-after-call.rs:9:35: 9:36 StorageDead(_4); // scope 0 at $DIR/no-spurious-drop-after-call.rs:9:35: 9:36
StorageDead(_1); // scope 0 at $DIR/no-spurious-drop-after-call.rs:9:35: 9:36 StorageDead(_1); // scope 0 at $DIR/no-spurious-drop-after-call.rs:9:35: 9:36
@ -46,7 +42,11 @@ fn main() -> () {
return; // scope 0 at $DIR/no-spurious-drop-after-call.rs:10:2: 10:2 return; // scope 0 at $DIR/no-spurious-drop-after-call.rs:10:2: 10:2
} }
bb3 (cleanup): {
drop(_2) -> bb4; // scope 0 at $DIR/no-spurious-drop-after-call.rs:9:34: 9:35
}
bb4 (cleanup): { bb4 (cleanup): {
drop(_2) -> bb1; // scope 0 at $DIR/no-spurious-drop-after-call.rs:9:34: 9:35 resume; // scope 0 at $DIR/no-spurious-drop-after-call.rs:8:1: 10:2
} }
} }

View file

@ -31,18 +31,18 @@ fn main() -> () {
drop(_6) -> [return: bb4, unwind: bb3]; // scope 1 at $DIR/packed-struct-drop-aligned.rs:7:5: 7:8 drop(_6) -> [return: bb4, unwind: bb3]; // scope 1 at $DIR/packed-struct-drop-aligned.rs:7:5: 7:8
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/packed-struct-drop-aligned.rs:5:1: 8:2
}
bb2: {
StorageDead(_1); // scope 0 at $DIR/packed-struct-drop-aligned.rs:8:1: 8:2 StorageDead(_1); // scope 0 at $DIR/packed-struct-drop-aligned.rs:8:1: 8:2
return; // scope 0 at $DIR/packed-struct-drop-aligned.rs:8:2: 8:2 return; // scope 0 at $DIR/packed-struct-drop-aligned.rs:8:2: 8:2
} }
bb2 (cleanup): {
resume; // scope 0 at $DIR/packed-struct-drop-aligned.rs:5:1: 8:2
}
bb3 (cleanup): { bb3 (cleanup): {
(_1.0: Aligned) = move _4; // scope 1 at $DIR/packed-struct-drop-aligned.rs:7:5: 7:8 (_1.0: Aligned) = move _4; // scope 1 at $DIR/packed-struct-drop-aligned.rs:7:5: 7:8
drop(_1) -> bb1; // scope 0 at $DIR/packed-struct-drop-aligned.rs:8:1: 8:2 drop(_1) -> bb2; // scope 0 at $DIR/packed-struct-drop-aligned.rs:8:1: 8:2
} }
bb4: { bb4: {
@ -50,6 +50,6 @@ fn main() -> () {
(_1.0: Aligned) = move _4; // scope 1 at $DIR/packed-struct-drop-aligned.rs:7:5: 7:8 (_1.0: Aligned) = move _4; // scope 1 at $DIR/packed-struct-drop-aligned.rs:7:5: 7:8
StorageDead(_4); // scope 1 at $DIR/packed-struct-drop-aligned.rs:7:28: 7:29 StorageDead(_4); // scope 1 at $DIR/packed-struct-drop-aligned.rs:7:28: 7:29
_0 = const (); // scope 0 at $DIR/packed-struct-drop-aligned.rs:5:11: 8:2 _0 = const (); // scope 0 at $DIR/packed-struct-drop-aligned.rs:5:11: 8:2
drop(_1) -> [return: bb2, unwind: bb1]; // scope 0 at $DIR/packed-struct-drop-aligned.rs:8:1: 8:2 drop(_1) -> [return: bb1, unwind: bb2]; // scope 0 at $DIR/packed-struct-drop-aligned.rs:8:1: 8:2
} }
} }

View file

@ -31,18 +31,18 @@ fn main() -> () {
drop(_6) -> [return: bb4, unwind: bb3]; // scope 1 at $DIR/packed-struct-drop-aligned.rs:7:5: 7:8 drop(_6) -> [return: bb4, unwind: bb3]; // scope 1 at $DIR/packed-struct-drop-aligned.rs:7:5: 7:8
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/packed-struct-drop-aligned.rs:5:1: 8:2
}
bb2: {
StorageDead(_1); // scope 0 at $DIR/packed-struct-drop-aligned.rs:8:1: 8:2 StorageDead(_1); // scope 0 at $DIR/packed-struct-drop-aligned.rs:8:1: 8:2
return; // scope 0 at $DIR/packed-struct-drop-aligned.rs:8:2: 8:2 return; // scope 0 at $DIR/packed-struct-drop-aligned.rs:8:2: 8:2
} }
bb2 (cleanup): {
resume; // scope 0 at $DIR/packed-struct-drop-aligned.rs:5:1: 8:2
}
bb3 (cleanup): { bb3 (cleanup): {
(_1.0: Aligned) = move _4; // scope 1 at $DIR/packed-struct-drop-aligned.rs:7:5: 7:8 (_1.0: Aligned) = move _4; // scope 1 at $DIR/packed-struct-drop-aligned.rs:7:5: 7:8
drop(_1) -> bb1; // scope 0 at $DIR/packed-struct-drop-aligned.rs:8:1: 8:2 drop(_1) -> bb2; // scope 0 at $DIR/packed-struct-drop-aligned.rs:8:1: 8:2
} }
bb4: { bb4: {
@ -50,6 +50,6 @@ fn main() -> () {
(_1.0: Aligned) = move _4; // scope 1 at $DIR/packed-struct-drop-aligned.rs:7:5: 7:8 (_1.0: Aligned) = move _4; // scope 1 at $DIR/packed-struct-drop-aligned.rs:7:5: 7:8
StorageDead(_4); // scope 1 at $DIR/packed-struct-drop-aligned.rs:7:28: 7:29 StorageDead(_4); // scope 1 at $DIR/packed-struct-drop-aligned.rs:7:28: 7:29
_0 = const (); // scope 0 at $DIR/packed-struct-drop-aligned.rs:5:11: 8:2 _0 = const (); // scope 0 at $DIR/packed-struct-drop-aligned.rs:5:11: 8:2
drop(_1) -> [return: bb2, unwind: bb1]; // scope 0 at $DIR/packed-struct-drop-aligned.rs:8:1: 8:2 drop(_1) -> [return: bb1, unwind: bb2]; // scope 0 at $DIR/packed-struct-drop-aligned.rs:8:1: 8:2
} }
} }

View file

@ -70,29 +70,21 @@ fn main() -> () {
Retag(_7); // scope 1 at $DIR/retag.rs:32:29: 32:35 Retag(_7); // scope 1 at $DIR/retag.rs:32:29: 32:35
_6 = &mut (*_7); // scope 1 at $DIR/retag.rs:32:29: 32:35 _6 = &mut (*_7); // scope 1 at $DIR/retag.rs:32:29: 32:35
Retag([2phase] _6); // scope 1 at $DIR/retag.rs:32:29: 32:35 Retag([2phase] _6); // scope 1 at $DIR/retag.rs:32:29: 32:35
_3 = Test::foo(move _4, move _6) -> [return: bb2, unwind: bb3]; // scope 1 at $DIR/retag.rs:32:17: 32:36 _3 = Test::foo(move _4, move _6) -> [return: bb1, unwind: bb7]; // scope 1 at $DIR/retag.rs:32:17: 32:36
// mir::Constant // mir::Constant
// + span: $DIR/retag.rs:32:25: 32:28 // + span: $DIR/retag.rs:32:25: 32:28
// + literal: Const { ty: for<'r, 'x> fn(&'r Test, &'x mut i32) -> &'x mut i32 {Test::foo}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: for<'r, 'x> fn(&'r Test, &'x mut i32) -> &'x mut i32 {Test::foo}, val: Value(Scalar(<ZST>)) }
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/retag.rs:29:1: 51:2
}
bb2: {
Retag(_3); // scope 1 at $DIR/retag.rs:32:17: 32:36 Retag(_3); // scope 1 at $DIR/retag.rs:32:17: 32:36
StorageDead(_6); // scope 1 at $DIR/retag.rs:32:35: 32:36 StorageDead(_6); // scope 1 at $DIR/retag.rs:32:35: 32:36
StorageDead(_4); // scope 1 at $DIR/retag.rs:32:35: 32:36 StorageDead(_4); // scope 1 at $DIR/retag.rs:32:35: 32:36
StorageDead(_7); // scope 1 at $DIR/retag.rs:32:36: 32:37 StorageDead(_7); // scope 1 at $DIR/retag.rs:32:36: 32:37
drop(_5) -> [return: bb4, unwind: bb1]; // scope 1 at $DIR/retag.rs:32:36: 32:37 drop(_5) -> [return: bb2, unwind: bb8]; // scope 1 at $DIR/retag.rs:32:36: 32:37
} }
bb3 (cleanup): { bb2: {
drop(_5) -> bb1; // scope 1 at $DIR/retag.rs:32:36: 32:37
}
bb4: {
StorageDead(_5); // scope 1 at $DIR/retag.rs:32:36: 32:37 StorageDead(_5); // scope 1 at $DIR/retag.rs:32:36: 32:37
StorageLive(_8); // scope 2 at $DIR/retag.rs:33:13: 33:14 StorageLive(_8); // scope 2 at $DIR/retag.rs:33:13: 33:14
StorageLive(_9); // scope 2 at $DIR/retag.rs:33:19: 33:20 StorageLive(_9); // scope 2 at $DIR/retag.rs:33:19: 33:20
@ -138,10 +130,10 @@ fn main() -> () {
Retag(_18); // scope 6 at $DIR/retag.rs:44:16: 44:18 Retag(_18); // scope 6 at $DIR/retag.rs:44:16: 44:18
_17 = &(*_18); // scope 6 at $DIR/retag.rs:44:16: 44:18 _17 = &(*_18); // scope 6 at $DIR/retag.rs:44:16: 44:18
Retag(_17); // scope 6 at $DIR/retag.rs:44:16: 44:18 Retag(_17); // scope 6 at $DIR/retag.rs:44:16: 44:18
_15 = move _16(move _17) -> bb5; // scope 6 at $DIR/retag.rs:44:14: 44:19 _15 = move _16(move _17) -> bb3; // scope 6 at $DIR/retag.rs:44:14: 44:19
} }
bb5: { bb3: {
Retag(_15); // scope 6 at $DIR/retag.rs:44:14: 44:19 Retag(_15); // scope 6 at $DIR/retag.rs:44:14: 44:19
StorageDead(_17); // scope 6 at $DIR/retag.rs:44:18: 44:19 StorageDead(_17); // scope 6 at $DIR/retag.rs:44:18: 44:19
StorageDead(_16); // scope 6 at $DIR/retag.rs:44:18: 44:19 StorageDead(_16); // scope 6 at $DIR/retag.rs:44:18: 44:19
@ -166,25 +158,21 @@ fn main() -> () {
Retag(_23); // scope 7 at $DIR/retag.rs:47:21: 47:23 Retag(_23); // scope 7 at $DIR/retag.rs:47:21: 47:23
_22 = &(*_23); // scope 7 at $DIR/retag.rs:47:21: 47:23 _22 = &(*_23); // scope 7 at $DIR/retag.rs:47:21: 47:23
Retag(_22); // scope 7 at $DIR/retag.rs:47:21: 47:23 Retag(_22); // scope 7 at $DIR/retag.rs:47:21: 47:23
_19 = Test::foo_shr(move _20, move _22) -> [return: bb6, unwind: bb7]; // scope 7 at $DIR/retag.rs:47:5: 47:24 _19 = Test::foo_shr(move _20, move _22) -> [return: bb4, unwind: bb6]; // scope 7 at $DIR/retag.rs:47:5: 47:24
// mir::Constant // mir::Constant
// + span: $DIR/retag.rs:47:13: 47:20 // + span: $DIR/retag.rs:47:13: 47:20
// + literal: Const { ty: for<'r, 'x> fn(&'r Test, &'x i32) -> &'x i32 {Test::foo_shr}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: for<'r, 'x> fn(&'r Test, &'x i32) -> &'x i32 {Test::foo_shr}, val: Value(Scalar(<ZST>)) }
} }
bb6: { bb4: {
Retag(_19); // scope 7 at $DIR/retag.rs:47:5: 47:24 Retag(_19); // scope 7 at $DIR/retag.rs:47:5: 47:24
StorageDead(_22); // scope 7 at $DIR/retag.rs:47:23: 47:24 StorageDead(_22); // scope 7 at $DIR/retag.rs:47:23: 47:24
StorageDead(_20); // scope 7 at $DIR/retag.rs:47:23: 47:24 StorageDead(_20); // scope 7 at $DIR/retag.rs:47:23: 47:24
StorageDead(_23); // scope 7 at $DIR/retag.rs:47:24: 47:25 StorageDead(_23); // scope 7 at $DIR/retag.rs:47:24: 47:25
drop(_21) -> [return: bb8, unwind: bb1]; // scope 7 at $DIR/retag.rs:47:24: 47:25 drop(_21) -> [return: bb5, unwind: bb8]; // scope 7 at $DIR/retag.rs:47:24: 47:25
} }
bb7 (cleanup): { bb5: {
drop(_21) -> bb1; // scope 7 at $DIR/retag.rs:47:24: 47:25
}
bb8: {
StorageDead(_21); // scope 7 at $DIR/retag.rs:47:24: 47:25 StorageDead(_21); // scope 7 at $DIR/retag.rs:47:24: 47:25
StorageDead(_19); // scope 7 at $DIR/retag.rs:47:24: 47:25 StorageDead(_19); // scope 7 at $DIR/retag.rs:47:24: 47:25
StorageLive(_25); // scope 7 at $DIR/retag.rs:50:9: 50:11 StorageLive(_25); // scope 7 at $DIR/retag.rs:50:9: 50:11
@ -200,4 +188,16 @@ fn main() -> () {
StorageDead(_1); // scope 0 at $DIR/retag.rs:51:1: 51:2 StorageDead(_1); // scope 0 at $DIR/retag.rs:51:1: 51:2
return; // scope 0 at $DIR/retag.rs:51:2: 51:2 return; // scope 0 at $DIR/retag.rs:51:2: 51:2
} }
bb6 (cleanup): {
drop(_21) -> bb8; // scope 7 at $DIR/retag.rs:47:24: 47:25
}
bb7 (cleanup): {
drop(_5) -> bb8; // scope 1 at $DIR/retag.rs:32:36: 32:37
}
bb8 (cleanup): {
resume; // scope 0 at $DIR/retag.rs:29:1: 51:2
}
} }

View file

@ -6,32 +6,24 @@ fn match_bool(_1: bool) -> usize {
bb0: { bb0: {
FakeRead(ForMatchedPlace, _1); // scope 0 at $DIR/simple-match.rs:6:11: 6:12 FakeRead(ForMatchedPlace, _1); // scope 0 at $DIR/simple-match.rs:6:11: 6:12
switchInt(_1) -> [false: bb3, otherwise: bb2]; // scope 0 at $DIR/simple-match.rs:7:9: 7:13 switchInt(_1) -> [false: bb2, otherwise: bb1]; // scope 0 at $DIR/simple-match.rs:7:9: 7:13
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/simple-match.rs:5:1: 10:2 falseEdge -> [real: bb3, imaginary: bb2]; // scope 0 at $DIR/simple-match.rs:7:9: 7:13
} }
bb2: { bb2: {
falseEdge -> [real: bb4, imaginary: bb3]; // scope 0 at $DIR/simple-match.rs:7:9: 7:13 _0 = const 20_usize; // scope 0 at $DIR/simple-match.rs:8:14: 8:16
goto -> bb4; // scope 0 at $DIR/simple-match.rs:6:5: 9:6
} }
bb3: { bb3: {
_0 = const 20_usize; // scope 0 at $DIR/simple-match.rs:8:14: 8:16 _0 = const 10_usize; // scope 0 at $DIR/simple-match.rs:7:17: 7:19
goto -> bb5; // scope 0 at $DIR/simple-match.rs:6:5: 9:6 goto -> bb4; // scope 0 at $DIR/simple-match.rs:6:5: 9:6
} }
bb4: { bb4: {
_0 = const 10_usize; // scope 0 at $DIR/simple-match.rs:7:17: 7:19
goto -> bb5; // scope 0 at $DIR/simple-match.rs:6:5: 9:6
}
bb5: {
goto -> bb6; // scope 0 at $DIR/simple-match.rs:10:2: 10:2
}
bb6: {
return; // scope 0 at $DIR/simple-match.rs:10:2: 10:2 return; // scope 0 at $DIR/simple-match.rs:10:2: 10:2
} }
} }

View file

@ -6,32 +6,24 @@ fn match_bool(_1: bool) -> usize {
bb0: { bb0: {
FakeRead(ForMatchedPlace, _1); // scope 0 at $DIR/simple-match.rs:6:11: 6:12 FakeRead(ForMatchedPlace, _1); // scope 0 at $DIR/simple-match.rs:6:11: 6:12
switchInt(_1) -> [false: bb3, otherwise: bb2]; // scope 0 at $DIR/simple-match.rs:7:9: 7:13 switchInt(_1) -> [false: bb2, otherwise: bb1]; // scope 0 at $DIR/simple-match.rs:7:9: 7:13
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/simple-match.rs:5:1: 10:2 falseEdge -> [real: bb3, imaginary: bb2]; // scope 0 at $DIR/simple-match.rs:7:9: 7:13
} }
bb2: { bb2: {
falseEdge -> [real: bb4, imaginary: bb3]; // scope 0 at $DIR/simple-match.rs:7:9: 7:13 _0 = const 20_usize; // scope 0 at $DIR/simple-match.rs:8:14: 8:16
goto -> bb4; // scope 0 at $DIR/simple-match.rs:6:5: 9:6
} }
bb3: { bb3: {
_0 = const 20_usize; // scope 0 at $DIR/simple-match.rs:8:14: 8:16 _0 = const 10_usize; // scope 0 at $DIR/simple-match.rs:7:17: 7:19
goto -> bb5; // scope 0 at $DIR/simple-match.rs:6:5: 9:6 goto -> bb4; // scope 0 at $DIR/simple-match.rs:6:5: 9:6
} }
bb4: { bb4: {
_0 = const 10_usize; // scope 0 at $DIR/simple-match.rs:7:17: 7:19
goto -> bb5; // scope 0 at $DIR/simple-match.rs:6:5: 9:6
}
bb5: {
goto -> bb6; // scope 0 at $DIR/simple-match.rs:10:2: 10:2
}
bb6: {
return; // scope 0 at $DIR/simple-match.rs:10:2: 10:2 return; // scope 0 at $DIR/simple-match.rs:10:2: 10:2
} }
} }

View file

@ -92,7 +92,7 @@
+ _0 = move _3; // scope 8 at $SRC_DIR/core/src/result.rs:LL:COL + _0 = move _3; // scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
StorageDead(_3); // scope 0 at $DIR/simplify-arm.rs:24:15: 24:16 StorageDead(_3); // scope 0 at $DIR/simplify-arm.rs:24:15: 24:16
StorageDead(_2); // scope 0 at $DIR/simplify-arm.rs:26:1: 26:2 StorageDead(_2); // scope 0 at $DIR/simplify-arm.rs:26:1: 26:2
goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:24:14: 24:15 goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:26:2: 26:2
} }
bb4: { bb4: {

View file

@ -66,7 +66,7 @@
- _0 = move _3; // scope 8 at $SRC_DIR/core/src/result.rs:LL:COL - _0 = move _3; // scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
- StorageDead(_3); // scope 0 at $DIR/simplify-arm.rs:24:15: 24:16 - StorageDead(_3); // scope 0 at $DIR/simplify-arm.rs:24:15: 24:16
- StorageDead(_2); // scope 0 at $DIR/simplify-arm.rs:26:1: 26:2 - StorageDead(_2); // scope 0 at $DIR/simplify-arm.rs:26:1: 26:2
- goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:24:14: 24:15 - goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:26:2: 26:2
- } - }
- -
- bb4: { - bb4: {

View file

@ -13,40 +13,40 @@
- -
- bb1: { - bb1: {
StorageLive(_2); // scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17 StorageLive(_2); // scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17
- _2 = bar() -> bb3; // scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17 - _2 = bar() -> bb2; // scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17
+ _2 = bar() -> bb1; // scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17 + _2 = bar() -> bb1; // scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17
// mir::Constant // mir::Constant
// + span: $DIR/simplify_cfg.rs:7:12: 7:15 // + span: $DIR/simplify_cfg.rs:7:12: 7:15
// + literal: Const { ty: fn() -> bool {bar}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn() -> bool {bar}, val: Value(Scalar(<ZST>)) }
} }
- bb2 (cleanup): { - bb2: {
- resume; // scope 0 at $DIR/simplify_cfg.rs:5:1: 11:2 - nop; // scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17
- switchInt(_2) -> [false: bb4, otherwise: bb3]; // scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
+ bb1: { + bb1: {
+ switchInt(_2) -> [false: bb2, otherwise: bb3]; // scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10 + switchInt(_2) -> [false: bb2, otherwise: bb3]; // scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
} }
- bb3: { - bb3: {
- nop; // scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17 - goto -> bb5; // scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
- switchInt(_2) -> [false: bb5, otherwise: bb4]; // scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
- } - }
- -
- bb4: { - bb4: {
- goto -> bb6; // scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
- }
-
- bb5: {
+ bb2: { + bb2: {
_1 = const (); // scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10 _1 = const (); // scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
StorageDead(_2); // scope 0 at $DIR/simplify_cfg.rs:10:5: 10:6 StorageDead(_2); // scope 0 at $DIR/simplify_cfg.rs:10:5: 10:6
goto -> bb0; // scope 0 at $DIR/simplify_cfg.rs:6:5: 10:6 goto -> bb0; // scope 0 at $DIR/simplify_cfg.rs:6:5: 10:6
} }
- bb6: { - bb5: {
+ bb3: { + bb3: {
_0 = const (); // scope 0 at $DIR/simplify_cfg.rs:8:13: 8:18 _0 = const (); // scope 0 at $DIR/simplify_cfg.rs:8:13: 8:18
StorageDead(_2); // scope 0 at $DIR/simplify_cfg.rs:10:5: 10:6 StorageDead(_2); // scope 0 at $DIR/simplify_cfg.rs:10:5: 10:6
return; // scope 0 at $DIR/simplify_cfg.rs:11:2: 11:2 return; // scope 0 at $DIR/simplify_cfg.rs:11:2: 11:2
- }
-
- bb6 (cleanup): {
- resume; // scope 0 at $DIR/simplify_cfg.rs:5:1: 11:2
} }
} }

View file

@ -9,78 +9,70 @@
bb0: { bb0: {
- goto -> bb1; // scope 0 at $DIR/simplify_cfg.rs:6:5: 10:6 - goto -> bb1; // scope 0 at $DIR/simplify_cfg.rs:6:5: 10:6
+ falseUnwind -> [real: bb1, cleanup: bb2]; // scope 0 at $DIR/simplify_cfg.rs:6:5: 10:6 + falseUnwind -> [real: bb1, cleanup: bb6]; // scope 0 at $DIR/simplify_cfg.rs:6:5: 10:6
} }
bb1: { bb1: {
- falseUnwind -> [real: bb3, cleanup: bb4]; // scope 0 at $DIR/simplify_cfg.rs:6:5: 10:6 - falseUnwind -> [real: bb2, cleanup: bb11]; // scope 0 at $DIR/simplify_cfg.rs:6:5: 10:6
- } - }
- -
- bb2: { - bb2: {
- goto -> bb13; // scope 0 at $DIR/simplify_cfg.rs:11:2: 11:2
- }
-
- bb3: {
StorageLive(_2); // scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17 StorageLive(_2); // scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17
- _2 = bar() -> [return: bb5, unwind: bb4]; // scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17 - _2 = bar() -> [return: bb3, unwind: bb11]; // scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17
+ _2 = bar() -> [return: bb3, unwind: bb2]; // scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17 + _2 = bar() -> [return: bb2, unwind: bb6]; // scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17
// mir::Constant // mir::Constant
// + span: $DIR/simplify_cfg.rs:7:12: 7:15 // + span: $DIR/simplify_cfg.rs:7:12: 7:15
// + literal: Const { ty: fn() -> bool {bar}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: fn() -> bool {bar}, val: Value(Scalar(<ZST>)) }
} }
- bb4 (cleanup): { - bb3: {
+ bb2 (cleanup): { + bb2: {
resume; // scope 0 at $DIR/simplify_cfg.rs:5:1: 11:2 FakeRead(ForMatchedPlace, _2); // scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17
- switchInt(_2) -> [false: bb5, otherwise: bb4]; // scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
+ switchInt(_2) -> [false: bb4, otherwise: bb3]; // scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
}
- bb4: {
- falseEdge -> [real: bb6, imaginary: bb5]; // scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
+ bb3: {
+ falseEdge -> [real: bb5, imaginary: bb4]; // scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
} }
- bb5: { - bb5: {
+ bb3: {
FakeRead(ForMatchedPlace, _2); // scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17
- switchInt(_2) -> [false: bb7, otherwise: bb6]; // scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
+ switchInt(_2) -> [false: bb5, otherwise: bb4]; // scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
}
- bb6: {
- falseEdge -> [real: bb8, imaginary: bb7]; // scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
+ bb4: { + bb4: {
+ falseEdge -> [real: bb6, imaginary: bb5]; // scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
}
- bb7: {
+ bb5: {
_1 = const (); // scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10 _1 = const (); // scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
- goto -> bb12; // scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10 - goto -> bb9; // scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
+ StorageDead(_2); // scope 0 at $DIR/simplify_cfg.rs:10:5: 10:6 + StorageDead(_2); // scope 0 at $DIR/simplify_cfg.rs:10:5: 10:6
+ goto -> bb0; // scope 0 at $DIR/simplify_cfg.rs:6:5: 10:6 + goto -> bb0; // scope 0 at $DIR/simplify_cfg.rs:6:5: 10:6
} }
- bb8: { - bb6: {
+ bb6: { + bb5: {
_0 = const (); // scope 0 at $DIR/simplify_cfg.rs:8:13: 8:18 _0 = const (); // scope 0 at $DIR/simplify_cfg.rs:8:13: 8:18
- goto -> bb9; // scope 0 at $DIR/simplify_cfg.rs:8:13: 8:18 - goto -> bb10; // scope 0 at $DIR/simplify_cfg.rs:8:13: 8:18
- }
-
- bb7: {
- unreachable; // scope 0 at $DIR/simplify_cfg.rs:7:18: 9:10
- }
-
- bb8: {
- goto -> bb9; // scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
- } - }
- -
- bb9: { - bb9: {
StorageDead(_2); // scope 0 at $DIR/simplify_cfg.rs:10:5: 10:6 StorageDead(_2); // scope 0 at $DIR/simplify_cfg.rs:10:5: 10:6
- goto -> bb2; // scope 0 at $DIR/simplify_cfg.rs:8:13: 8:18
- }
-
- bb10: {
- unreachable; // scope 0 at $DIR/simplify_cfg.rs:7:18: 9:10
- }
-
- bb11: {
- goto -> bb12; // scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
- }
-
- bb12: {
- StorageDead(_2); // scope 0 at $DIR/simplify_cfg.rs:10:5: 10:6
- goto -> bb1; // scope 0 at $DIR/simplify_cfg.rs:6:5: 10:6 - goto -> bb1; // scope 0 at $DIR/simplify_cfg.rs:6:5: 10:6
- } - }
- -
- bb13: { - bb10: {
- StorageDead(_2); // scope 0 at $DIR/simplify_cfg.rs:10:5: 10:6
return; // scope 0 at $DIR/simplify_cfg.rs:11:2: 11:2 return; // scope 0 at $DIR/simplify_cfg.rs:11:2: 11:2
} }
- bb11 (cleanup): {
+ bb6 (cleanup): {
resume; // scope 0 at $DIR/simplify_cfg.rs:5:1: 11:2
}
} }

View file

@ -88,7 +88,7 @@
+ _0 = move _3; // scope 8 at $SRC_DIR/core/src/result.rs:LL:COL + _0 = move _3; // scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
StorageDead(_3); // scope 0 at $DIR/simplify_try.rs:8:15: 8:16 StorageDead(_3); // scope 0 at $DIR/simplify_try.rs:8:15: 8:16
StorageDead(_2); // scope 0 at $DIR/simplify_try.rs:10:1: 10:2 StorageDead(_2); // scope 0 at $DIR/simplify_try.rs:10:1: 10:2
return; // scope 0 at $DIR/simplify_try.rs:8:14: 8:15 return; // scope 0 at $DIR/simplify_try.rs:10:2: 10:2
} }
} }

View file

@ -61,7 +61,6 @@
<body> <body>
<div class="code" style="counter-reset: line 4"><span class="line"><span class="code" style="--layer: 0">fn main() </span><span><span class="code even" style="--layer: 1" title="0: $DIR/spanview-block.rs:5:11: 5:13: <div class="code" style="counter-reset: line 4"><span class="line"><span class="code" style="--layer: 0">fn main() </span><span><span class="code even" style="--layer: 1" title="0: $DIR/spanview-block.rs:5:11: 5:13:
5:11-5:13: Assign: _0 = const () 5:11-5:13: Assign: _0 = const ()
5:13-5:13: Goto: goto -&gt; bb2"><span class="annotation">0⦊</span>{}<span class="annotation">⦉0</span></span></span><span><span class="code odd" style="--layer: 1" title="2: $DIR/spanview-block.rs:5:13: 5:13: 5:13-5:13: Return: return"><span class="annotation">0⦊</span>{}<span class="annotation">⦉0</span></span></span></span></div>
5:13-5:13: Return: return"><span class="annotation">2⦊</span>‸<span class="annotation">⦉2</span></span></span></span></div>
</body> </body>
</html> </html>

View file

@ -60,8 +60,7 @@
</head> </head>
<body> <body>
<div class="code" style="counter-reset: line 4"><span class="line"><span class="code" style="--layer: 0">fn main() </span><span><span class="code even" style="--layer: 1" title="0[0]: $DIR/spanview-statement.rs:5:11: 5:13: <div class="code" style="counter-reset: line 4"><span class="line"><span class="code" style="--layer: 0">fn main() </span><span><span class="code even" style="--layer: 1" title="0[0]: $DIR/spanview-statement.rs:5:11: 5:13:
5:11-5:13: Assign: _0 = const ()"><span class="annotation">0[0]⦊</span>{}<span class="annotation">⦉0[0]</span></span></span><span><span class="code odd" style="--layer: 1" title="0:Goto: $DIR/spanview-statement.rs:5:13: 5:13: 5:11-5:13: Assign: _0 = const ()"><span class="annotation">0[0]⦊</span>{}<span class="annotation">⦉0[0]</span></span></span><span><span class="code odd" style="--layer: 1" title="0:Return: $DIR/spanview-statement.rs:5:13: 5:13:
5:13-5:13: Goto: goto -&gt; bb2"><span class="annotation">0:Goto⦊</span>‸<span class="annotation">⦉0:Goto</span></span></span><span><span class="code even" style="--layer: 1" title="2:Return: $DIR/spanview-statement.rs:5:13: 5:13: 5:13-5:13: Return: return"><span class="annotation">0:Return⦊</span>‸<span class="annotation">⦉0:Return</span></span></span></span></div>
5:13-5:13: Return: return"><span class="annotation">2:Return⦊</span>‸<span class="annotation">⦉2:Return</span></span></span></span></div>
</body> </body>
</html> </html>

View file

@ -59,8 +59,7 @@
</style> </style>
</head> </head>
<body> <body>
<div class="code" style="counter-reset: line 4"><span class="line"><span class="code" style="--layer: 0">fn main() {}</span><span><span class="code even" style="--layer: 1" title="0:Goto: $DIR/spanview-terminator.rs:5:13: 5:13: <div class="code" style="counter-reset: line 4"><span class="line"><span class="code" style="--layer: 0">fn main() {}</span><span><span class="code even" style="--layer: 1" title="0:Return: $DIR/spanview-terminator.rs:5:13: 5:13:
5:13-5:13: Goto: goto -&gt; bb2"><span class="annotation">0:Goto⦊</span>‸<span class="annotation">⦉0:Goto</span></span></span><span><span class="code odd" style="--layer: 1" title="2:Return: $DIR/spanview-terminator.rs:5:13: 5:13: 5:13-5:13: Return: return"><span class="annotation">0:Return⦊</span>‸<span class="annotation">⦉0:Return</span></span></span></span></div>
5:13-5:13: Return: return"><span class="annotation">2:Return⦊</span>‸<span class="annotation">⦉2:Return</span></span></span></span></div>
</body> </body>
</html> </html>

View file

@ -159,8 +159,4 @@ static XXX: &Foo = {
StorageDead(_1); // scope 0 at $DIR/storage_live_dead_in_statics.rs:23:1: 23:2 StorageDead(_1); // scope 0 at $DIR/storage_live_dead_in_statics.rs:23:1: 23:2
return; // scope 0 at $DIR/storage_live_dead_in_statics.rs:5:1: 23:3 return; // scope 0 at $DIR/storage_live_dead_in_statics.rs:5:1: 23:3
} }
bb1 (cleanup): {
resume; // scope 0 at $DIR/storage_live_dead_in_statics.rs:5:1: 23:3
}
} }

View file

@ -22,78 +22,62 @@ fn move_out_by_subslice() -> () {
_3 = Box(i32); // scope 0 at $DIR/uniform_array_move_out.rs:11:14: 11:19 _3 = Box(i32); // scope 0 at $DIR/uniform_array_move_out.rs:11:14: 11:19
(*_3) = const 1_i32; // scope 0 at $DIR/uniform_array_move_out.rs:11:18: 11:19 (*_3) = const 1_i32; // scope 0 at $DIR/uniform_array_move_out.rs:11:18: 11:19
_2 = move _3; // scope 0 at $DIR/uniform_array_move_out.rs:11:14: 11:19 _2 = move _3; // scope 0 at $DIR/uniform_array_move_out.rs:11:14: 11:19
drop(_3) -> [return: bb4, unwind: bb2]; // scope 0 at $DIR/uniform_array_move_out.rs:11:18: 11:19 drop(_3) -> [return: bb1, unwind: bb9]; // scope 0 at $DIR/uniform_array_move_out.rs:11:18: 11:19
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/uniform_array_move_out.rs:10:1: 13:2
}
bb2 (cleanup): {
drop(_2) -> bb1; // scope 0 at $DIR/uniform_array_move_out.rs:11:26: 11:27
}
bb3 (cleanup): {
drop(_3) -> bb2; // scope 0 at $DIR/uniform_array_move_out.rs:11:18: 11:19
}
bb4: {
StorageDead(_3); // scope 0 at $DIR/uniform_array_move_out.rs:11:18: 11:19 StorageDead(_3); // scope 0 at $DIR/uniform_array_move_out.rs:11:18: 11:19
StorageLive(_4); // scope 0 at $DIR/uniform_array_move_out.rs:11:21: 11:26 StorageLive(_4); // scope 0 at $DIR/uniform_array_move_out.rs:11:21: 11:26
StorageLive(_5); // scope 0 at $DIR/uniform_array_move_out.rs:11:21: 11:26 StorageLive(_5); // scope 0 at $DIR/uniform_array_move_out.rs:11:21: 11:26
_5 = Box(i32); // scope 0 at $DIR/uniform_array_move_out.rs:11:21: 11:26 _5 = Box(i32); // scope 0 at $DIR/uniform_array_move_out.rs:11:21: 11:26
(*_5) = const 2_i32; // scope 0 at $DIR/uniform_array_move_out.rs:11:25: 11:26 (*_5) = const 2_i32; // scope 0 at $DIR/uniform_array_move_out.rs:11:25: 11:26
_4 = move _5; // scope 0 at $DIR/uniform_array_move_out.rs:11:21: 11:26 _4 = move _5; // scope 0 at $DIR/uniform_array_move_out.rs:11:21: 11:26
drop(_5) -> [return: bb7, unwind: bb5]; // scope 0 at $DIR/uniform_array_move_out.rs:11:25: 11:26 drop(_5) -> [return: bb2, unwind: bb8]; // scope 0 at $DIR/uniform_array_move_out.rs:11:25: 11:26
} }
bb5 (cleanup): { bb2: {
drop(_4) -> bb2; // scope 0 at $DIR/uniform_array_move_out.rs:11:26: 11:27
}
bb6 (cleanup): {
drop(_5) -> bb5; // scope 0 at $DIR/uniform_array_move_out.rs:11:25: 11:26
}
bb7: {
StorageDead(_5); // scope 0 at $DIR/uniform_array_move_out.rs:11:25: 11:26 StorageDead(_5); // scope 0 at $DIR/uniform_array_move_out.rs:11:25: 11:26
_1 = [move _2, move _4]; // scope 0 at $DIR/uniform_array_move_out.rs:11:13: 11:27 _1 = [move _2, move _4]; // scope 0 at $DIR/uniform_array_move_out.rs:11:13: 11:27
drop(_4) -> [return: bb8, unwind: bb2]; // scope 0 at $DIR/uniform_array_move_out.rs:11:26: 11:27 drop(_4) -> [return: bb3, unwind: bb9]; // scope 0 at $DIR/uniform_array_move_out.rs:11:26: 11:27
} }
bb8: { bb3: {
StorageDead(_4); // scope 0 at $DIR/uniform_array_move_out.rs:11:26: 11:27 StorageDead(_4); // scope 0 at $DIR/uniform_array_move_out.rs:11:26: 11:27
drop(_2) -> [return: bb9, unwind: bb1]; // scope 0 at $DIR/uniform_array_move_out.rs:11:26: 11:27 drop(_2) -> [return: bb4, unwind: bb10]; // scope 0 at $DIR/uniform_array_move_out.rs:11:26: 11:27
} }
bb9: { bb4: {
StorageDead(_2); // scope 0 at $DIR/uniform_array_move_out.rs:11:26: 11:27 StorageDead(_2); // scope 0 at $DIR/uniform_array_move_out.rs:11:26: 11:27
FakeRead(ForLet, _1); // scope 0 at $DIR/uniform_array_move_out.rs:11:9: 11:10 FakeRead(ForLet, _1); // scope 0 at $DIR/uniform_array_move_out.rs:11:9: 11:10
StorageLive(_6); // scope 1 at $DIR/uniform_array_move_out.rs:12:10: 12:17 StorageLive(_6); // scope 1 at $DIR/uniform_array_move_out.rs:12:10: 12:17
_6 = move _1[0..2]; // scope 1 at $DIR/uniform_array_move_out.rs:12:10: 12:17 _6 = move _1[0..2]; // scope 1 at $DIR/uniform_array_move_out.rs:12:10: 12:17
_0 = const (); // scope 0 at $DIR/uniform_array_move_out.rs:10:27: 13:2 _0 = const (); // scope 0 at $DIR/uniform_array_move_out.rs:10:27: 13:2
drop(_6) -> [return: bb12, unwind: bb10]; // scope 1 at $DIR/uniform_array_move_out.rs:13:1: 13:2 drop(_6) -> [return: bb5, unwind: bb7]; // scope 1 at $DIR/uniform_array_move_out.rs:13:1: 13:2
}
bb5: {
StorageDead(_6); // scope 1 at $DIR/uniform_array_move_out.rs:13:1: 13:2
drop(_1) -> [return: bb6, unwind: bb10]; // scope 0 at $DIR/uniform_array_move_out.rs:13:1: 13:2
}
bb6: {
StorageDead(_1); // scope 0 at $DIR/uniform_array_move_out.rs:13:1: 13:2
return; // scope 0 at $DIR/uniform_array_move_out.rs:13:2: 13:2
}
bb7 (cleanup): {
drop(_1) -> bb10; // scope 0 at $DIR/uniform_array_move_out.rs:13:1: 13:2
}
bb8 (cleanup): {
drop(_4) -> bb9; // scope 0 at $DIR/uniform_array_move_out.rs:11:26: 11:27
}
bb9 (cleanup): {
drop(_2) -> bb10; // scope 0 at $DIR/uniform_array_move_out.rs:11:26: 11:27
} }
bb10 (cleanup): { bb10 (cleanup): {
drop(_1) -> bb1; // scope 0 at $DIR/uniform_array_move_out.rs:13:1: 13:2 resume; // scope 0 at $DIR/uniform_array_move_out.rs:10:1: 13:2
}
bb11 (cleanup): {
drop(_6) -> bb10; // scope 1 at $DIR/uniform_array_move_out.rs:13:1: 13:2
}
bb12: {
StorageDead(_6); // scope 1 at $DIR/uniform_array_move_out.rs:13:1: 13:2
drop(_1) -> [return: bb13, unwind: bb1]; // scope 0 at $DIR/uniform_array_move_out.rs:13:1: 13:2
}
bb13: {
StorageDead(_1); // scope 0 at $DIR/uniform_array_move_out.rs:13:1: 13:2
goto -> bb14; // scope 0 at $DIR/uniform_array_move_out.rs:13:2: 13:2
}
bb14: {
return; // scope 0 at $DIR/uniform_array_move_out.rs:13:2: 13:2
} }
} }

View file

@ -22,78 +22,62 @@ fn move_out_from_end() -> () {
_3 = Box(i32); // scope 0 at $DIR/uniform_array_move_out.rs:5:14: 5:19 _3 = Box(i32); // scope 0 at $DIR/uniform_array_move_out.rs:5:14: 5:19
(*_3) = const 1_i32; // scope 0 at $DIR/uniform_array_move_out.rs:5:18: 5:19 (*_3) = const 1_i32; // scope 0 at $DIR/uniform_array_move_out.rs:5:18: 5:19
_2 = move _3; // scope 0 at $DIR/uniform_array_move_out.rs:5:14: 5:19 _2 = move _3; // scope 0 at $DIR/uniform_array_move_out.rs:5:14: 5:19
drop(_3) -> [return: bb4, unwind: bb2]; // scope 0 at $DIR/uniform_array_move_out.rs:5:18: 5:19 drop(_3) -> [return: bb1, unwind: bb9]; // scope 0 at $DIR/uniform_array_move_out.rs:5:18: 5:19
} }
bb1 (cleanup): { bb1: {
resume; // scope 0 at $DIR/uniform_array_move_out.rs:4:1: 7:2
}
bb2 (cleanup): {
drop(_2) -> bb1; // scope 0 at $DIR/uniform_array_move_out.rs:5:26: 5:27
}
bb3 (cleanup): {
drop(_3) -> bb2; // scope 0 at $DIR/uniform_array_move_out.rs:5:18: 5:19
}
bb4: {
StorageDead(_3); // scope 0 at $DIR/uniform_array_move_out.rs:5:18: 5:19 StorageDead(_3); // scope 0 at $DIR/uniform_array_move_out.rs:5:18: 5:19
StorageLive(_4); // scope 0 at $DIR/uniform_array_move_out.rs:5:21: 5:26 StorageLive(_4); // scope 0 at $DIR/uniform_array_move_out.rs:5:21: 5:26
StorageLive(_5); // scope 0 at $DIR/uniform_array_move_out.rs:5:21: 5:26 StorageLive(_5); // scope 0 at $DIR/uniform_array_move_out.rs:5:21: 5:26
_5 = Box(i32); // scope 0 at $DIR/uniform_array_move_out.rs:5:21: 5:26 _5 = Box(i32); // scope 0 at $DIR/uniform_array_move_out.rs:5:21: 5:26
(*_5) = const 2_i32; // scope 0 at $DIR/uniform_array_move_out.rs:5:25: 5:26 (*_5) = const 2_i32; // scope 0 at $DIR/uniform_array_move_out.rs:5:25: 5:26
_4 = move _5; // scope 0 at $DIR/uniform_array_move_out.rs:5:21: 5:26 _4 = move _5; // scope 0 at $DIR/uniform_array_move_out.rs:5:21: 5:26
drop(_5) -> [return: bb7, unwind: bb5]; // scope 0 at $DIR/uniform_array_move_out.rs:5:25: 5:26 drop(_5) -> [return: bb2, unwind: bb8]; // scope 0 at $DIR/uniform_array_move_out.rs:5:25: 5:26
} }
bb5 (cleanup): { bb2: {
drop(_4) -> bb2; // scope 0 at $DIR/uniform_array_move_out.rs:5:26: 5:27
}
bb6 (cleanup): {
drop(_5) -> bb5; // scope 0 at $DIR/uniform_array_move_out.rs:5:25: 5:26
}
bb7: {
StorageDead(_5); // scope 0 at $DIR/uniform_array_move_out.rs:5:25: 5:26 StorageDead(_5); // scope 0 at $DIR/uniform_array_move_out.rs:5:25: 5:26
_1 = [move _2, move _4]; // scope 0 at $DIR/uniform_array_move_out.rs:5:13: 5:27 _1 = [move _2, move _4]; // scope 0 at $DIR/uniform_array_move_out.rs:5:13: 5:27
drop(_4) -> [return: bb8, unwind: bb2]; // scope 0 at $DIR/uniform_array_move_out.rs:5:26: 5:27 drop(_4) -> [return: bb3, unwind: bb9]; // scope 0 at $DIR/uniform_array_move_out.rs:5:26: 5:27
} }
bb8: { bb3: {
StorageDead(_4); // scope 0 at $DIR/uniform_array_move_out.rs:5:26: 5:27 StorageDead(_4); // scope 0 at $DIR/uniform_array_move_out.rs:5:26: 5:27
drop(_2) -> [return: bb9, unwind: bb1]; // scope 0 at $DIR/uniform_array_move_out.rs:5:26: 5:27 drop(_2) -> [return: bb4, unwind: bb10]; // scope 0 at $DIR/uniform_array_move_out.rs:5:26: 5:27
} }
bb9: { bb4: {
StorageDead(_2); // scope 0 at $DIR/uniform_array_move_out.rs:5:26: 5:27 StorageDead(_2); // scope 0 at $DIR/uniform_array_move_out.rs:5:26: 5:27
FakeRead(ForLet, _1); // scope 0 at $DIR/uniform_array_move_out.rs:5:9: 5:10 FakeRead(ForLet, _1); // scope 0 at $DIR/uniform_array_move_out.rs:5:9: 5:10
StorageLive(_6); // scope 1 at $DIR/uniform_array_move_out.rs:6:14: 6:16 StorageLive(_6); // scope 1 at $DIR/uniform_array_move_out.rs:6:14: 6:16
_6 = move _1[1 of 2]; // scope 1 at $DIR/uniform_array_move_out.rs:6:14: 6:16 _6 = move _1[1 of 2]; // scope 1 at $DIR/uniform_array_move_out.rs:6:14: 6:16
_0 = const (); // scope 0 at $DIR/uniform_array_move_out.rs:4:24: 7:2 _0 = const (); // scope 0 at $DIR/uniform_array_move_out.rs:4:24: 7:2
drop(_6) -> [return: bb12, unwind: bb10]; // scope 1 at $DIR/uniform_array_move_out.rs:7:1: 7:2 drop(_6) -> [return: bb5, unwind: bb7]; // scope 1 at $DIR/uniform_array_move_out.rs:7:1: 7:2
}
bb5: {
StorageDead(_6); // scope 1 at $DIR/uniform_array_move_out.rs:7:1: 7:2
drop(_1) -> [return: bb6, unwind: bb10]; // scope 0 at $DIR/uniform_array_move_out.rs:7:1: 7:2
}
bb6: {
StorageDead(_1); // scope 0 at $DIR/uniform_array_move_out.rs:7:1: 7:2
return; // scope 0 at $DIR/uniform_array_move_out.rs:7:2: 7:2
}
bb7 (cleanup): {
drop(_1) -> bb10; // scope 0 at $DIR/uniform_array_move_out.rs:7:1: 7:2
}
bb8 (cleanup): {
drop(_4) -> bb9; // scope 0 at $DIR/uniform_array_move_out.rs:5:26: 5:27
}
bb9 (cleanup): {
drop(_2) -> bb10; // scope 0 at $DIR/uniform_array_move_out.rs:5:26: 5:27
} }
bb10 (cleanup): { bb10 (cleanup): {
drop(_1) -> bb1; // scope 0 at $DIR/uniform_array_move_out.rs:7:1: 7:2 resume; // scope 0 at $DIR/uniform_array_move_out.rs:4:1: 7:2
}
bb11 (cleanup): {
drop(_6) -> bb10; // scope 1 at $DIR/uniform_array_move_out.rs:7:1: 7:2
}
bb12: {
StorageDead(_6); // scope 1 at $DIR/uniform_array_move_out.rs:7:1: 7:2
drop(_1) -> [return: bb13, unwind: bb1]; // scope 0 at $DIR/uniform_array_move_out.rs:7:1: 7:2
}
bb13: {
StorageDead(_1); // scope 0 at $DIR/uniform_array_move_out.rs:7:1: 7:2
goto -> bb14; // scope 0 at $DIR/uniform_array_move_out.rs:7:2: 7:2
}
bb14: {
return; // scope 0 at $DIR/uniform_array_move_out.rs:7:2: 7:2
} }
} }

View file

@ -7,8 +7,4 @@ E::V::{constant#0}: isize = {
_0 = const 5_isize; // scope 0 at $DIR/unusual-item-types.rs:22:9: 22:10 _0 = const 5_isize; // scope 0 at $DIR/unusual-item-types.rs:22:9: 22:10
return; // scope 0 at $DIR/unusual-item-types.rs:22:9: 22:10 return; // scope 0 at $DIR/unusual-item-types.rs:22:9: 22:10
} }
bb1 (cleanup): {
resume; // scope 0 at $DIR/unusual-item-types.rs:22:9: 22:10
}
} }

View file

@ -7,8 +7,4 @@ E::V::{constant#0}: isize = {
_0 = const 5_isize; // scope 0 at $DIR/unusual-item-types.rs:22:9: 22:10 _0 = const 5_isize; // scope 0 at $DIR/unusual-item-types.rs:22:9: 22:10
return; // scope 0 at $DIR/unusual-item-types.rs:22:9: 22:10 return; // scope 0 at $DIR/unusual-item-types.rs:22:9: 22:10
} }
bb1 (cleanup): {
resume; // scope 0 at $DIR/unusual-item-types.rs:22:9: 22:10
}
} }

View file

@ -6,7 +6,7 @@ fn drop_in_place(_1: *mut Vec<i32>) -> () {
let mut _3: (); // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL let mut _3: (); // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
bb0: { bb0: {
goto -> bb7; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL goto -> bb6; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
} }
bb1: { bb1: {
@ -22,20 +22,16 @@ fn drop_in_place(_1: *mut Vec<i32>) -> () {
} }
bb4 (cleanup): { bb4 (cleanup): {
goto -> bb2; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL drop(((*_1).0: alloc::raw_vec::RawVec<i32>)) -> bb2; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
} }
bb5 (cleanup): { bb5: {
drop(((*_1).0: alloc::raw_vec::RawVec<i32>)) -> bb4; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL drop(((*_1).0: alloc::raw_vec::RawVec<i32>)) -> [return: bb3, unwind: bb2]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
} }
bb6: { bb6: {
drop(((*_1).0: alloc::raw_vec::RawVec<i32>)) -> [return: bb3, unwind: bb4]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
}
bb7: {
_2 = &mut (*_1); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL _2 = &mut (*_1); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
_3 = <Vec<i32> as Drop>::drop(move _2) -> [return: bb6, unwind: bb5]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL _3 = <Vec<i32> as Drop>::drop(move _2) -> [return: bb5, unwind: bb4]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
// mir::Constant // mir::Constant
// + span: $SRC_DIR/core/src/ptr/mod.rs:LL:COL // + span: $SRC_DIR/core/src/ptr/mod.rs:LL:COL
// + literal: Const { ty: for<'r> fn(&'r mut std::vec::Vec<i32>) {<std::vec::Vec<i32> as std::ops::Drop>::drop}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: for<'r> fn(&'r mut std::vec::Vec<i32>) {<std::vec::Vec<i32> as std::ops::Drop>::drop}, val: Value(Scalar(<ZST>)) }

View file

@ -6,7 +6,7 @@ fn drop_in_place(_1: *mut Vec<i32>) -> () {
let mut _3: (); // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL let mut _3: (); // in scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
bb0: { bb0: {
goto -> bb7; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL goto -> bb6; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
} }
bb1: { bb1: {
@ -22,20 +22,16 @@ fn drop_in_place(_1: *mut Vec<i32>) -> () {
} }
bb4 (cleanup): { bb4 (cleanup): {
goto -> bb2; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL drop(((*_1).0: alloc::raw_vec::RawVec<i32>)) -> bb2; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
} }
bb5 (cleanup): { bb5: {
drop(((*_1).0: alloc::raw_vec::RawVec<i32>)) -> bb4; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL drop(((*_1).0: alloc::raw_vec::RawVec<i32>)) -> [return: bb3, unwind: bb2]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
} }
bb6: { bb6: {
drop(((*_1).0: alloc::raw_vec::RawVec<i32>)) -> [return: bb3, unwind: bb4]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
}
bb7: {
_2 = &mut (*_1); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL _2 = &mut (*_1); // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
_3 = <Vec<i32> as Drop>::drop(move _2) -> [return: bb6, unwind: bb5]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL _3 = <Vec<i32> as Drop>::drop(move _2) -> [return: bb5, unwind: bb4]; // scope 0 at $SRC_DIR/core/src/ptr/mod.rs:LL:COL
// mir::Constant // mir::Constant
// + span: $SRC_DIR/core/src/ptr/mod.rs:LL:COL // + span: $SRC_DIR/core/src/ptr/mod.rs:LL:COL
// + literal: Const { ty: for<'r> fn(&'r mut std::vec::Vec<i32>) {<std::vec::Vec<i32> as std::ops::Drop>::drop}, val: Value(Scalar(<ZST>)) } // + literal: Const { ty: for<'r> fn(&'r mut std::vec::Vec<i32>) {<std::vec::Vec<i32> as std::ops::Drop>::drop}, val: Value(Scalar(<ZST>)) }

View file

@ -7,8 +7,4 @@ const <impl at $DIR/unusual-item-types.rs:9:1: 11:2>::ASSOCIATED_CONSTANT: i32 =
_0 = const 2_i32; // scope 0 at $DIR/unusual-item-types.rs:10:38: 10:39 _0 = const 2_i32; // scope 0 at $DIR/unusual-item-types.rs:10:38: 10:39
return; // scope 0 at $DIR/unusual-item-types.rs:10:5: 10:40 return; // scope 0 at $DIR/unusual-item-types.rs:10:5: 10:40
} }
bb1 (cleanup): {
resume; // scope 0 at $DIR/unusual-item-types.rs:10:5: 10:40
}
} }

View file

@ -7,8 +7,4 @@ const <impl at $DIR/unusual-item-types.rs:9:1: 11:2>::ASSOCIATED_CONSTANT: i32 =
_0 = const 2_i32; // scope 0 at $DIR/unusual-item-types.rs:10:38: 10:39 _0 = const 2_i32; // scope 0 at $DIR/unusual-item-types.rs:10:38: 10:39
return; // scope 0 at $DIR/unusual-item-types.rs:10:5: 10:40 return; // scope 0 at $DIR/unusual-item-types.rs:10:5: 10:40
} }
bb1 (cleanup): {
resume; // scope 0 at $DIR/unusual-item-types.rs:10:5: 10:40
}
} }

View file

@ -52,7 +52,7 @@ fn while_loop(_1: bool) -> () {
bb6: { bb6: {
_0 = const (); // scope 0 at $DIR/while-storage.rs:12:13: 12:18 _0 = const (); // scope 0 at $DIR/while-storage.rs:12:13: 12:18
StorageDead(_4); // scope 0 at $DIR/while-storage.rs:14:5: 14:6 StorageDead(_4); // scope 0 at $DIR/while-storage.rs:14:5: 14:6
goto -> bb7; // scope 0 at $DIR/while-storage.rs:12:13: 12:18 goto -> bb7; // scope 0 at $DIR/while-storage.rs:1:1: 1:1
} }
bb7: { bb7: {

View file

@ -16,15 +16,15 @@
"percent": 100 "percent": 100
}, },
"lines": { "lines": {
"count": 46, "count": 40,
"covered": 19, "covered": 19,
"percent": 41.30434782608695 "percent": 47.5
}, },
"regions": { "regions": {
"count": 75, "count": 71,
"covered": 23, "covered": 23,
"notcovered": 52, "notcovered": 48,
"percent": 30.666666666666664 "percent": 32.3943661971831
} }
} }
} }
@ -41,15 +41,15 @@
"percent": 100 "percent": 100
}, },
"lines": { "lines": {
"count": 46, "count": 40,
"covered": 19, "covered": 19,
"percent": 41.30434782608695 "percent": 47.5
}, },
"regions": { "regions": {
"count": 75, "count": 71,
"covered": 23, "covered": 23,
"notcovered": 52, "notcovered": 48,
"percent": 30.666666666666664 "percent": 32.3943661971831
} }
} }
} }

View file

@ -20,13 +20,13 @@
16| 0| } else { 16| 0| } else {
17| 0| return; 17| 0| return;
18| 0| } 18| 0| }
19| 0| 19| |
20| 0| let mut countdown = 0; 20| | let mut countdown = 0;
21| 2| if true { 21| 2| if true {
^1 ^1
22| 2| countdown = 10; 22| 2| countdown = 10;
23| 2| } 23| 2| }
24| 0| 24| |
25| 2| if countdown > 7 { 25| 2| if countdown > 7 {
^1 ^1
26| 2| countdown -= 4; 26| 2| countdown -= 4;
@ -40,13 +40,13 @@
32| 0| } else { 32| 0| } else {
33| 0| return; 33| 0| return;
34| 0| } 34| 0| }
35| 0| 35| |
36| 0| let mut countdown = 0; 36| | let mut countdown = 0;
37| 2| if true { 37| 2| if true {
^1 ^1
38| 2| countdown = 10; 38| 2| countdown = 10;
39| 2| } 39| 2| }
40| 0| 40| |
41| 2| if countdown > 7 { 41| 2| if countdown > 7 {
^1 ^1
42| 2| countdown -= 4; 42| 2| countdown -= 4;

View file

@ -16,15 +16,15 @@
"percent": 100 "percent": 100
}, },
"lines": { "lines": {
"count": 46, "count": 40,
"covered": 19, "covered": 19,
"percent": 41.30434782608695 "percent": 47.5
}, },
"regions": { "regions": {
"count": 75, "count": 71,
"covered": 23, "covered": 23,
"notcovered": 52, "notcovered": 48,
"percent": 30.666666666666664 "percent": 32.3943661971831
} }
} }
} }
@ -41,15 +41,15 @@
"percent": 100 "percent": 100
}, },
"lines": { "lines": {
"count": 46, "count": 40,
"covered": 19, "covered": 19,
"percent": 41.30434782608695 "percent": 47.5
}, },
"regions": { "regions": {
"count": 75, "count": 71,
"covered": 23, "covered": 23,
"notcovered": 52, "notcovered": 48,
"percent": 30.666666666666664 "percent": 32.3943661971831
} }
} }
} }

View file

@ -20,13 +20,13 @@
16| 0| } else { 16| 0| } else {
17| 0| return; 17| 0| return;
18| 0| } 18| 0| }
19| 0| 19| |
20| 0| let mut countdown = 0; 20| | let mut countdown = 0;
21| 2| if true { 21| 2| if true {
^1 ^1
22| 2| countdown = 10; 22| 2| countdown = 10;
23| 2| } 23| 2| }
24| 0| 24| |
25| 2| if countdown > 7 { 25| 2| if countdown > 7 {
^1 ^1
26| 2| countdown -= 4; 26| 2| countdown -= 4;
@ -40,13 +40,13 @@
32| 0| } else { 32| 0| } else {
33| 0| return; 33| 0| return;
34| 0| } 34| 0| }
35| 0| 35| |
36| 0| let mut countdown = 0; 36| | let mut countdown = 0;
37| 2| if true { 37| 2| if true {
^1 ^1
38| 2| countdown = 10; 38| 2| countdown = 10;
39| 2| } 39| 2| }
40| 0| 40| |
41| 2| if countdown > 7 { 41| 2| if countdown > 7 {
^1 ^1
42| 2| countdown -= 4; 42| 2| countdown -= 4;

View file

@ -0,0 +1,175 @@
// compile-flags: -C opt-level=3
// edition:2018
use std::future::Future;
use std::marker::PhantomData;
use std::pin::Pin;
use std::sync::atomic::AtomicUsize;
use std::sync::Arc;
use std::task::Poll::{Pending, Ready};
use std::task::Waker;
use std::task::{Context, Poll};
use std::{
ptr,
task::{RawWaker, RawWakerVTable},
};
/// Future for the [`poll_fn`] function.
pub struct PollFn<F> {
f: F,
}
impl<F> Unpin for PollFn<F> {}
/// Creates a new future wrapping around a function returning [`Poll`].
pub fn poll_fn<T, F>(f: F) -> PollFn<F>
where
F: FnMut(&mut Context<'_>) -> Poll<T>,
{
PollFn { f }
}
impl<T, F> Future for PollFn<F>
where
F: FnMut(&mut Context<'_>) -> Poll<T>,
{
type Output = T;
fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<T> {
(&mut self.f)(cx)
}
}
pub fn run<F: Future>(future: F) -> F::Output {
BasicScheduler.block_on(future)
}
pub(crate) struct BasicScheduler;
impl BasicScheduler {
pub(crate) fn block_on<F>(&mut self, mut future: F) -> F::Output
where
F: Future,
{
let waker = unsafe { Waker::from_raw(raw_waker()) };
let mut cx = std::task::Context::from_waker(&waker);
let mut future = unsafe { Pin::new_unchecked(&mut future) };
loop {
if let Ready(v) = future.as_mut().poll(&mut cx) {
return v;
}
}
}
}
// ===== impl Spawner =====
fn raw_waker() -> RawWaker {
RawWaker::new(ptr::null(), waker_vtable())
}
fn waker_vtable() -> &'static RawWakerVTable {
&RawWakerVTable::new(
clone_arc_raw,
wake_arc_raw,
wake_by_ref_arc_raw,
drop_arc_raw,
)
}
unsafe fn clone_arc_raw(_: *const ()) -> RawWaker {
raw_waker()
}
unsafe fn wake_arc_raw(_: *const ()) {}
unsafe fn wake_by_ref_arc_raw(_: *const ()) {}
unsafe fn drop_arc_raw(_: *const ()) {}
struct AtomicWaker {}
impl AtomicWaker {
/// Create an `AtomicWaker`
fn new() -> AtomicWaker {
AtomicWaker {}
}
fn register_by_ref(&self, _waker: &Waker) {}
}
#[allow(dead_code)]
struct Tx<T> {
inner: Arc<Chan<T>>,
}
struct Rx<T> {
inner: Arc<Chan<T>>,
}
#[allow(dead_code)]
struct Chan<T> {
tx: PhantomData<T>,
semaphore: Sema,
rx_waker: AtomicWaker,
rx_closed: bool,
}
fn channel<T>() -> (Tx<T>, Rx<T>) {
let chan = Arc::new(Chan {
tx: PhantomData,
semaphore: Sema(AtomicUsize::new(0)),
rx_waker: AtomicWaker::new(),
rx_closed: false,
});
(
Tx {
inner: chan.clone(),
},
Rx { inner: chan },
)
}
// ===== impl Rx =====
impl<T> Rx<T> {
/// Receive the next value
fn recv(&mut self, cx: &mut Context<'_>) -> Poll<Option<T>> {
self.inner.rx_waker.register_by_ref(cx.waker());
if self.inner.rx_closed && self.inner.semaphore.is_idle() {
Ready(None)
} else {
Pending
}
}
}
struct Sema(AtomicUsize);
impl Sema {
fn is_idle(&self) -> bool {
false
}
}
pub struct UnboundedReceiver<T> {
chan: Rx<T>,
}
pub fn unbounded_channel<T>() -> UnboundedReceiver<T> {
let (tx, rx) = channel();
drop(tx);
let rx = UnboundedReceiver { chan: rx };
rx
}
impl<T> UnboundedReceiver<T> {
pub async fn recv(&mut self) -> Option<T> {
poll_fn(|cx| self.chan.recv(cx)).await
}
}

View file

@ -0,0 +1,66 @@
// compile-flags: -C opt-level=3
// aux-build: issue-72470-lib.rs
// edition:2018
// build-pass
// Regression test for issue #72470, using the minimization
// in https://github.com/jonas-schievink/llvm-error
extern crate issue_72470_lib;
use std::future::Future;
use std::pin::Pin;
use std::sync::Mutex;
use std::task::Poll::{Pending, Ready};
#[allow(dead_code)]
enum Msg {
A(Vec<()>),
B,
}
#[allow(dead_code)]
enum Out {
_0(Option<Msg>),
Disabled,
}
#[allow(unused_must_use)]
fn main() {
let mut rx = issue_72470_lib::unbounded_channel::<Msg>();
let entity = Mutex::new(());
issue_72470_lib::run(async move {
{
let output = {
let mut fut = rx.recv();
issue_72470_lib::poll_fn(|cx| {
loop {
let fut = unsafe { Pin::new_unchecked(&mut fut) };
let out = match fut.poll(cx) {
Ready(out) => out,
Pending => {
break;
}
};
#[allow(unused_variables)]
match &out {
Some(_msg) => {}
_ => break,
}
return Ready(Out::_0(out));
}
Ready(Out::_0(None))
})
.await
};
match output {
Out::_0(Some(_msg)) => {
entity.lock();
}
Out::_0(None) => unreachable!(),
_ => unreachable!(),
}
}
entity.lock();
});
}