summaryrefslogtreecommitdiff
path: root/zjit
diff options
context:
space:
mode:
Diffstat (limited to 'zjit')
-rw-r--r--zjit/src/cruby.rs6
-rw-r--r--zjit/src/cruby_bindings.inc.rs1
2 files changed, 5 insertions, 2 deletions
diff --git a/zjit/src/cruby.rs b/zjit/src/cruby.rs
index dff8d301d6..c0093dd284 100644
--- a/zjit/src/cruby.rs
+++ b/zjit/src/cruby.rs
@@ -939,8 +939,10 @@ pub mod test_utils {
let mut state: c_int = 0;
unsafe { super::rb_protect(Some(callback_wrapper), VALUE((&mut data) as *mut _ as usize), &mut state) };
- // TODO(alan): there should be a way to print the exception instead of swallowing it
- assert_eq!(0, state, "Exceptional unwind in callback. Ruby exception?");
+ if state != 0 {
+ unsafe { rb_zjit_print_exception(); }
+ assert_eq!(0, state, "Exceptional unwind in callback. Ruby exception?");
+ }
result.expect("Callback did not set result")
}
diff --git a/zjit/src/cruby_bindings.inc.rs b/zjit/src/cruby_bindings.inc.rs
index 6c5a7c82bf..01da0bff47 100644
--- a/zjit/src/cruby_bindings.inc.rs
+++ b/zjit/src/cruby_bindings.inc.rs
@@ -1023,4 +1023,5 @@ unsafe extern "C" {
pub fn rb_RCLASS_ORIGIN(c: VALUE) -> VALUE;
pub fn rb_iseq_get_zjit_payload(iseq: *const rb_iseq_t) -> *mut ::std::os::raw::c_void;
pub fn rb_iseq_set_zjit_payload(iseq: *const rb_iseq_t, payload: *mut ::std::os::raw::c_void);
+ pub fn rb_zjit_print_exception();
}