diff options
| author | Gary Guo <gary@garyguo.net> | 2022-10-10 22:40:40 +0100 | 
|---|---|---|
| committer | Gary Guo <gary@garyguo.net> | 2023-04-06 09:34:16 +0100 | 
| commit | 0a5dac3062ffc80a283943e49e2ada08f0b0eaf7 (patch) | |
| tree | 5110a2f63038db9e3e03883b3d3b5685452a5719 /compiler/rustc_mir_transform/src/inline.rs | |
| parent | 5e6ed132fa8a1bd1ec6b365e61e9e290528c90f5 (diff) | |
| download | rust-0a5dac3062ffc80a283943e49e2ada08f0b0eaf7.tar.gz rust-0a5dac3062ffc80a283943e49e2ada08f0b0eaf7.zip  | |
Add `UnwindAction::Terminate`
Diffstat (limited to 'compiler/rustc_mir_transform/src/inline.rs')
| -rw-r--r-- | compiler/rustc_mir_transform/src/inline.rs | 11 | 
1 files changed, 7 insertions, 4 deletions
diff --git a/compiler/rustc_mir_transform/src/inline.rs b/compiler/rustc_mir_transform/src/inline.rs index a4a1acfe428..b1480a524e5 100644 --- a/compiler/rustc_mir_transform/src/inline.rs +++ b/compiler/rustc_mir_transform/src/inline.rs @@ -1017,15 +1017,15 @@ impl Integrator<'_, '_> { fn map_unwind(&self, unwind: UnwindAction) -> UnwindAction { if self.in_cleanup_block { match unwind { - UnwindAction::Cleanup(_) => { + UnwindAction::Cleanup(_) | UnwindAction::Continue => { bug!("cleanup on cleanup block"); } - UnwindAction::Continue | UnwindAction::Unreachable => return unwind, + UnwindAction::Unreachable | UnwindAction::Terminate => return unwind, } } match unwind { - UnwindAction::Unreachable => unwind, + UnwindAction::Unreachable | UnwindAction::Terminate => unwind, UnwindAction::Cleanup(target) => UnwindAction::Cleanup(self.map_block(target)), // Add an unwind edge to the original call's cleanup block UnwindAction::Continue => self.cleanup_block, @@ -1141,7 +1141,10 @@ impl<'tcx> MutVisitor<'tcx> for Integrator<'_, 'tcx> { terminator.kind = TerminatorKind::Goto { target: tgt }; } UnwindAction::Continue => (), - UnwindAction::Unreachable => { + UnwindAction::Unreachable | UnwindAction::Terminate => { + // If the action is terminate, then we would have mapped marked + // all our call-sites as `UnwindAction::Terminate` and no cleanup + // blocks would ever be executed. terminator.kind = TerminatorKind::Unreachable; } },  | 
