summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--zjit/src/hir.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/zjit/src/hir.rs b/zjit/src/hir.rs
index 96e061e6da..dfa9ea1e17 100644
--- a/zjit/src/hir.rs
+++ b/zjit/src/hir.rs
@@ -2034,14 +2034,28 @@ impl Function {
result
}
+ fn assert_validates(&self) {
+ if let Err(err) = self.validate() {
+ eprintln!("Function failed validation.");
+ eprintln!("Err: {err:?}");
+ eprintln!("{}", FunctionPrinter::with_snapshot(self));
+ panic!("Aborting...");
+ }
+ }
+
/// Run all the optimization passes we have.
pub fn optimize(&mut self) {
// Function is assumed to have types inferred already
self.optimize_direct_sends();
+ #[cfg(debug_assertions)] self.assert_validates();
self.optimize_c_calls();
+ #[cfg(debug_assertions)] self.assert_validates();
self.fold_constants();
+ #[cfg(debug_assertions)] self.assert_validates();
self.clean_cfg();
+ #[cfg(debug_assertions)] self.assert_validates();
self.eliminate_dead_code();
+ #[cfg(debug_assertions)] self.assert_validates();
// Dump HIR after optimization
match get_option!(dump_hir_opt) {