Skip to content

Commit 3844593

Browse files
committed
An attempt to fix GH-12512
1 parent 9e15910 commit 3844593

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

ext/opcache/jit/zend_jit_trace.c

+9-5
Original file line numberDiff line numberDiff line change
@@ -6833,14 +6833,18 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
68336833
if (ra && (p-1)->op != ZEND_JIT_TRACE_ENTER) {
68346834
for (i = 0; i < op_array->last_var + op_array->T; i++) {
68356835
int32_t ref = STACK_REF(stack, i);
6836+
uint8_t type = STACK_TYPE(stack, i);
68366837

6837-
if (ref) {
6838-
uint8_t type = STACK_TYPE(stack, i);
6839-
6840-
if (!(STACK_FLAGS(stack, i) & (ZREG_LOAD|ZREG_STORE))
6841-
&& !zend_jit_store_ref(jit, 1 << type, i, ref, STACK_MEM_TYPE(stack, i) != type)) {
6838+
if (ref && (!(STACK_FLAGS(stack, i) & (ZREG_LOAD|ZREG_STORE)))) {
6839+
if (!zend_jit_store_ref(jit, 1 << type, i, ref, STACK_MEM_TYPE(stack, i) != type)) {
68426840
goto jit_failure;
68436841
}
6842+
SET_STACK_TYPE(stack, i, type, 1);
6843+
} else if (type != IS_UNKNOWN && type != STACK_MEM_TYPE(stack, i)) {
6844+
if (!zend_jit_store_type(jit, i, type)) {
6845+
return 0;
6846+
}
6847+
SET_STACK_TYPE(stack, i, type, 1);
68446848
}
68456849
CLEAR_STACK_REF(stack, i);
68466850
}

0 commit comments

Comments
 (0)