about summary refs log tree commit diff
path: root/compiler/rustc_mir_transform/src
diff options
context:
space:
mode:
authorJakob Degen <jakob.e.degen@gmail.com>2023-01-26 03:50:37 -0800
committerJakob Degen <jakob.e.degen@gmail.com>2023-01-26 03:50:37 -0800
commitf8aaf9aadb12c599eb20679cc141ce7c7c253c3a (patch)
tree1fd652254138e067ab06c45016bea7279ddc4f89 /compiler/rustc_mir_transform/src
parente187f8871e3d553181c9d2d4ac111197a139ca0d (diff)
downloadrust-f8aaf9aadb12c599eb20679cc141ce7c7c253c3a.tar.gz
rust-f8aaf9aadb12c599eb20679cc141ce7c7c253c3a.zip
Disable ConstGoto opt in cleanup blocks
Diffstat (limited to 'compiler/rustc_mir_transform/src')
-rw-r--r--compiler/rustc_mir_transform/src/const_goto.rs9
1 files changed, 9 insertions, 0 deletions
diff --git a/compiler/rustc_mir_transform/src/const_goto.rs b/compiler/rustc_mir_transform/src/const_goto.rs
index 40eefda4f07..da101ca7ad2 100644
--- a/compiler/rustc_mir_transform/src/const_goto.rs
+++ b/compiler/rustc_mir_transform/src/const_goto.rs
@@ -57,6 +57,15 @@ impl<'tcx> MirPass<'tcx> for ConstGoto {
 }
 
 impl<'tcx> Visitor<'tcx> for ConstGotoOptimizationFinder<'_, 'tcx> {
+    fn visit_basic_block_data(&mut self, block: BasicBlock, data: &BasicBlockData<'tcx>) {
+        if data.is_cleanup {
+            // Because of the restrictions around control flow in cleanup blocks, we don't perform
+            // this optimization at all in such blocks.
+            return;
+        }
+        self.super_basic_block_data(block, data);
+    }
+
     fn visit_terminator(&mut self, terminator: &Terminator<'tcx>, location: Location) {
         let _: Option<_> = try {
             let target = terminator.kind.as_goto()?;