Skip to content

Commit d25687b

Browse files
committed
Merge branch 'PHP-8.4'
* PHP-8.4: Cleanup SSA(s) in case of fatal error during tracing JIT
2 parents 7ea5c2b + d59ae93 commit d25687b

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

ext/opcache/jit/zend_jit_trace.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4095,6 +4095,7 @@ static zend_vm_opcode_handler_t zend_jit_trace(zend_jit_trace_rec *trace_buffer,
40954095
zend_jit_trace_rec *p;
40964096
zend_jit_op_array_trace_extension *jit_extension;
40974097
int num_op_arrays = 0;
4098+
bool do_bailout = 0;
40984099
zend_jit_trace_info *t;
40994100
const zend_op_array *op_arrays[ZEND_JIT_TRACE_MAX_FUNCS];
41004101
uint8_t smart_branch_opcode;
@@ -4125,6 +4126,8 @@ static zend_vm_opcode_handler_t zend_jit_trace(zend_jit_trace_rec *trace_buffer,
41254126

41264127
checkpoint = zend_arena_checkpoint(CG(arena));
41274128

4129+
zend_try {
4130+
41284131
ssa = zend_jit_trace_build_tssa(trace_buffer, parent_trace, exit_num, script, op_arrays, &num_op_arrays);
41294132

41304133
if (!ssa) {
@@ -7358,6 +7361,10 @@ static zend_vm_opcode_handler_t zend_jit_trace(zend_jit_trace_rec *trace_buffer,
73587361
zend_string_release(name);
73597362
}
73607363

7364+
} zend_catch {
7365+
do_bailout = 1;
7366+
} zend_end_try();
7367+
73617368
jit_cleanup:
73627369
/* Clean up used op_arrays */
73637370
while (num_op_arrays > 0) {
@@ -7378,6 +7385,10 @@ static zend_vm_opcode_handler_t zend_jit_trace(zend_jit_trace_rec *trace_buffer,
73787385
JIT_G(current_frame) = NULL;
73797386
JIT_G(current_trace) = NULL;
73807387

7388+
if (do_bailout) {
7389+
zend_bailout();
7390+
}
7391+
73817392
return handler;
73827393
}
73837394

0 commit comments

Comments
 (0)