Skip to content

Commit

Permalink
Rollup merge of rust-lang#92551 - RalfJung:stack-pop-cleanup, r=oli-obk
Browse files Browse the repository at this point in the history
rename StackPopClean::None to Root

With rust-lang#90102, `StackPopClean::None` is now only used for the "root" frame of the stack, so adjust its name accordingly and add an assertion.

r? `@oli-obk`
  • Loading branch information
matthiaskrgr authored Jan 4, 2022
2 parents 4b743f8 + d60018b commit e525e6a
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 8 deletions.
2 changes: 1 addition & 1 deletion compiler/rustc_const_eval/src/const_eval/eval_queries.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ fn eval_body_using_ecx<'mir, 'tcx>(
cid.instance,
body,
Some(&ret.into()),
StackPopCleanup::None { cleanup: false },
StackPopCleanup::Root { cleanup: false },
)?;

// The main interpreter loop.
Expand Down
18 changes: 12 additions & 6 deletions compiler/rustc_const_eval/src/interpret/eval_context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -156,11 +156,11 @@ pub enum StackPopCleanup {
/// `ret` stores the block we jump to on a normal return, while `unwind`
/// stores the block used for cleanup during unwinding.
Goto { ret: Option<mir::BasicBlock>, unwind: StackPopUnwind },
/// Just do nothing: Used by Main and for TLS hooks in miri.
/// The root frame of the stack: nowhere else to jump to.
/// `cleanup` says whether locals are deallocated. Static computation
/// wants them leaked to intern what they need (and just throw away
/// the entire `ecx` when it is done).
None { cleanup: bool },
Root { cleanup: bool },
}

/// State of a local variable including a memoized layout
Expand Down Expand Up @@ -849,7 +849,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
// because this is CTFE and the final value will be thoroughly validated anyway.
let cleanup = match return_to_block {
StackPopCleanup::Goto { .. } => true,
StackPopCleanup::None { cleanup, .. } => cleanup,
StackPopCleanup::Root { cleanup, .. } => cleanup,
};

if !cleanup {
Expand All @@ -874,16 +874,22 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
// Follow the unwind edge.
let unwind = match return_to_block {
StackPopCleanup::Goto { unwind, .. } => unwind,
StackPopCleanup::None { .. } => {
panic!("Encountered StackPopCleanup::None when unwinding!")
StackPopCleanup::Root { .. } => {
panic!("encountered StackPopCleanup::Root when unwinding!")
}
};
self.unwind_to_block(unwind)
} else {
// Follow the normal return edge.
match return_to_block {
StackPopCleanup::Goto { ret, .. } => self.return_to_block(ret),
StackPopCleanup::None { .. } => Ok(()),
StackPopCleanup::Root { .. } => {
assert!(
self.stack().is_empty(),
"only the topmost frame can have StackPopCleanup::Root"
);
Ok(())
}
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_mir_transform/src/const_prop.rs
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,7 @@ impl<'mir, 'tcx> ConstPropagator<'mir, 'tcx> {
Instance::new(def_id, substs),
dummy_body,
ret.as_ref(),
StackPopCleanup::None { cleanup: false },
StackPopCleanup::Root { cleanup: false },
)
.expect("failed to push initial stack frame");

Expand Down

0 comments on commit e525e6a

Please sign in to comment.