From 4bf2794e599c7905d3f83748678be656582ad6c3 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Tue, 26 Dec 2023 20:13:39 +0100 Subject: [PATCH] custom mir: better type-checking --- library/core/src/intrinsics/mir.rs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/library/core/src/intrinsics/mir.rs b/library/core/src/intrinsics/mir.rs index cffe462612850..c6401ec1e3333 100644 --- a/library/core/src/intrinsics/mir.rs +++ b/library/core/src/intrinsics/mir.rs @@ -287,31 +287,33 @@ macro_rules! define { } // Unwind actions +pub struct UnwindActionArg; define!( "mir_unwind_continue", /// An unwind action that continues unwinding. - fn UnwindContinue() + fn UnwindContinue() -> UnwindActionArg ); define!( "mir_unwind_unreachable", /// An unwind action that triggers undefined behaviour. - fn UnwindUnreachable() + fn UnwindUnreachable() -> UnwindActionArg ); define!( "mir_unwind_terminate", /// An unwind action that terminates the execution. /// /// `UnwindTerminate` can also be used as a terminator. - fn UnwindTerminate(reason: UnwindTerminateReason) + fn UnwindTerminate(reason: UnwindTerminateReason) -> UnwindActionArg ); define!( "mir_unwind_cleanup", /// An unwind action that continues execution in a given basic blok. - fn UnwindCleanup(goto: BasicBlock) + fn UnwindCleanup(goto: BasicBlock) -> UnwindActionArg ); // Return destination for `Call` -define!("mir_return_to", fn ReturnTo(goto: BasicBlock)); +pub struct ReturnToArg; +define!("mir_return_to", fn ReturnTo(goto: BasicBlock) -> ReturnToArg); // Terminators define!("mir_return", fn Return() -> BasicBlock); @@ -330,7 +332,7 @@ define!("mir_drop", /// - [`UnwindUnreachable`] /// - [`UnwindTerminate`] /// - [`UnwindCleanup`] - fn Drop(place: T, goto: (), unwind_action: ()) + fn Drop(place: T, goto: ReturnToArg, unwind_action: UnwindActionArg) ); define!("mir_call", /// Call a function. @@ -345,7 +347,7 @@ define!("mir_call", /// - [`UnwindUnreachable`] /// - [`UnwindTerminate`] /// - [`UnwindCleanup`] - fn Call(call: (), goto: (), unwind_action: ()) + fn Call(call: (), goto: ReturnToArg, unwind_action: UnwindActionArg) ); define!("mir_unwind_resume", /// A terminator that resumes the unwinding.