Skip to content

Commit 28eaad0

Browse files
committed
Clear result type for exit point caused by JMPZ_EX/NZ_EX
1 parent 8b43976 commit 28eaad0

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

ext/opcache/jit/zend_jit_trace.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3861,7 +3861,16 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
38613861
if (ra) {
38623862
zend_jit_trace_clenup_stack(stack, opline, ssa_op, ssa, ra);
38633863
}
3864-
exit_point = zend_jit_trace_get_exit_point(opline, exit_opline, p+1, 0);
3864+
if (opline->result_type == IS_TMP_VAR) {
3865+
zend_jit_trace_stack *stack = JIT_G(current_frame)->stack;
3866+
uint32_t old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var));
3867+
3868+
SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN);
3869+
exit_point = zend_jit_trace_get_exit_point(opline, exit_opline, p+1, 0);
3870+
SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var), old_info);
3871+
} else {
3872+
exit_point = zend_jit_trace_get_exit_point(opline, exit_opline, p+1, 0);
3873+
}
38653874
exit_addr = zend_jit_trace_get_exit_addr(exit_point);
38663875
if (!exit_addr) {
38673876
goto jit_failure;

0 commit comments

Comments
 (0)