about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2023-08-21 09:57:10 +0200
committerRalf Jung <post@ralfj.de>2023-08-24 13:28:26 +0200
commit3f4145e169f73392c3f5d0d8acf8840b2e8fc189 (patch)
tree0e8f61e6133598fb74fb0abeb8d50b195589c1a0
parent18658cb0c9320d5a028246562ed40663ea72371b (diff)
downloadrust-3f4145e169f73392c3f5d0d8acf8840b2e8fc189.tar.gz
rust-3f4145e169f73392c3f5d0d8acf8840b2e8fc189.zip
when terminating during unwinding, show the reason why
-rw-r--r--src/base.rs9
-rw-r--r--src/constant.rs2
2 files changed, 6 insertions, 5 deletions
diff --git a/src/base.rs b/src/base.rs
index ed371a04c53..9159bc36987 100644
--- a/src/base.rs
+++ b/src/base.rs
@@ -474,8 +474,8 @@ fn codegen_fn_body(fx: &mut FunctionCx<'_, '_, '_>, start_block: Block) {
                     *destination,
                 );
             }
-            TerminatorKind::UnwindTerminate => {
-                codegen_panic_cannot_unwind(fx, source_info);
+            TerminatorKind::UnwindTerminate(reason) => {
+                codegen_unwind_terminate(fx, source_info, *reason);
             }
             TerminatorKind::UnwindResume => {
                 // FIXME implement unwinding
@@ -971,13 +971,14 @@ pub(crate) fn codegen_panic_nounwind<'tcx>(
     codegen_panic_inner(fx, rustc_hir::LangItem::PanicNounwind, &args, source_info.span);
 }
 
-pub(crate) fn codegen_panic_cannot_unwind<'tcx>(
+pub(crate) fn codegen_unwind_terminate<'tcx>(
     fx: &mut FunctionCx<'_, '_, 'tcx>,
     source_info: mir::SourceInfo,
+    reason: UnwindTerminateReason,
 ) {
     let args = [];
 
-    codegen_panic_inner(fx, rustc_hir::LangItem::PanicCannotUnwind, &args, source_info.span);
+    codegen_panic_inner(fx, reason.lang_item(), &args, source_info.span);
 }
 
 fn codegen_panic_inner<'tcx>(
diff --git a/src/constant.rs b/src/constant.rs
index 7db5f79eead..a934b0767f1 100644
--- a/src/constant.rs
+++ b/src/constant.rs
@@ -551,7 +551,7 @@ pub(crate) fn mir_operand_get_const_val<'tcx>(
                     TerminatorKind::Goto { .. }
                     | TerminatorKind::SwitchInt { .. }
                     | TerminatorKind::UnwindResume
-                    | TerminatorKind::UnwindTerminate
+                    | TerminatorKind::UnwindTerminate(_)
                     | TerminatorKind::Return
                     | TerminatorKind::Unreachable
                     | TerminatorKind::Drop { .. }