Add some more comments
This commit is contained in:
parent
f810e600cd
commit
1e71862046
@ -434,7 +434,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||
literal: method,
|
||||
}),
|
||||
args: vec![val, expect],
|
||||
destination: Some((eq_result.clone(), eq_block)),
|
||||
destination: Some((eq_result, eq_block)),
|
||||
cleanup: None,
|
||||
from_hir_call: false,
|
||||
fn_span: source_info.span,
|
||||
|
@ -238,6 +238,9 @@ trait DropTreeBuilder<'tcx> {
|
||||
|
||||
impl DropTree {
|
||||
fn new() -> Self {
|
||||
// The root node of the tree doesn't represent a drop, but instead
|
||||
// represents the block in the tree that should be jumped to once all
|
||||
// of the required drops have been performed.
|
||||
let fake_source_info = SourceInfo::outermost(DUMMY_SP);
|
||||
let fake_data =
|
||||
DropData { source_info: fake_source_info, local: Local::MAX, kind: DropKind::Storage };
|
||||
@ -259,6 +262,10 @@ impl DropTree {
|
||||
self.entry_points.push((to, from));
|
||||
}
|
||||
|
||||
/// Builds the MIR for a given drop tree.
|
||||
///
|
||||
/// `blocks` should have the same length as `self.drops`, and may have its
|
||||
/// first value set to some already existing block.
|
||||
fn build_mir<'tcx, T: DropTreeBuilder<'tcx>>(
|
||||
&mut self,
|
||||
cfg: &mut CFG<'tcx>,
|
||||
@ -1345,10 +1352,16 @@ impl<'tcx> DropTreeBuilder<'tcx> for GeneratorDrop {
|
||||
cfg.start_new_block()
|
||||
}
|
||||
fn add_entry(cfg: &mut CFG<'tcx>, from: BasicBlock, to: BasicBlock) {
|
||||
let kind = &mut cfg.block_data_mut(from).terminator_mut().kind;
|
||||
if let TerminatorKind::Yield { drop, .. } = kind {
|
||||
let term = cfg.block_data_mut(from).terminator_mut();
|
||||
if let TerminatorKind::Yield { ref mut drop, .. } = term.kind {
|
||||
*drop = Some(to);
|
||||
};
|
||||
} else {
|
||||
span_bug!(
|
||||
term.source_info.span,
|
||||
"cannot enter generator drop tree from {:?}",
|
||||
term.kind
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1359,8 +1372,8 @@ impl<'tcx> DropTreeBuilder<'tcx> for Unwind {
|
||||
cfg.start_new_cleanup_block()
|
||||
}
|
||||
fn add_entry(cfg: &mut CFG<'tcx>, from: BasicBlock, to: BasicBlock) {
|
||||
let term = &mut cfg.block_data_mut(from).terminator_mut().kind;
|
||||
match term {
|
||||
let term = &mut cfg.block_data_mut(from).terminator_mut();
|
||||
match &mut term.kind {
|
||||
TerminatorKind::Drop { unwind, .. }
|
||||
| TerminatorKind::DropAndReplace { unwind, .. }
|
||||
| TerminatorKind::FalseUnwind { unwind, .. }
|
||||
@ -1376,7 +1389,9 @@ impl<'tcx> DropTreeBuilder<'tcx> for Unwind {
|
||||
| TerminatorKind::Unreachable
|
||||
| TerminatorKind::Yield { .. }
|
||||
| TerminatorKind::GeneratorDrop
|
||||
| TerminatorKind::FalseEdges { .. } => bug!("cannot unwind from {:?}", term),
|
||||
| TerminatorKind::FalseEdges { .. } => {
|
||||
span_bug!(term.source_info.span, "cannot unwind from {:?}", term.kind)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user