Skip to content

Commit d7a1427

Browse files
shqkingdstogov
authored andcommitted
Support failed JIT test case: assign_024.phpt
Support assginment with undefined variable, and a warning would be emitted. Besides, test case assign_023.phpt would pass as well with this patch.
1 parent 31b0f9f commit d7a1427

File tree

1 file changed

+34
-1
lines changed

1 file changed

+34
-1
lines changed

ext/opcache/jit/zend_jit_arm64.dasc

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3129,7 +3129,40 @@ static int zend_jit_simple_assign(dasm_State **Dst,
31293129
}
31303130
} else {
31313131
if (val_info & MAY_BE_UNDEF) {
3132-
| brk #0
3132+
if (in_cold) {
3133+
| brk #0 // TODO
3134+
| IF_NOT_ZVAL_TYPE val_addr, IS_UNDEF, >2, TMP1w, TMP2
3135+
} else {
3136+
| IF_ZVAL_TYPE val_addr, IS_UNDEF, >1, TMP1w, TMP2
3137+
|.cold_code
3138+
|1:
3139+
}
3140+
| // zend_error(E_WARNING, "Undefined variable $%s", ZSTR_VAL(CV_DEF_OF(EX_VAR_TO_NUM(opline->op1.var))));
3141+
if (save_r1) {
3142+
| brk #0 // TODO
3143+
| str FCARG1x, T1 // save
3144+
}
3145+
| SET_ZVAL_TYPE_INFO var_addr, IS_NULL, TMP1w, TMP2
3146+
if (res_addr) {
3147+
| brk #0 // TODO
3148+
| SET_ZVAL_TYPE_INFO res_addr, IS_NULL, TMP1w, TMP2
3149+
}
3150+
if (opline) {
3151+
| SET_EX_OPLINE opline, Rx(tmp_reg)
3152+
}
3153+
ZEND_ASSERT(Z_MODE(val_addr) == IS_MEM_ZVAL && Z_REG(val_addr) == ZREG_FP);
3154+
| LOAD_32BIT_VAL FCARG1w, Z_OFFSET(val_addr)
3155+
| EXT_CALL zend_jit_undefined_op_helper, REG0
3156+
if (save_r1) {
3157+
| brk #0 // TODO
3158+
| ldr FCARG1x, T1 // restore
3159+
}
3160+
| b >3
3161+
if (in_cold) {
3162+
|2:
3163+
} else {
3164+
|.code
3165+
}
31333166
}
31343167
if (val_info & MAY_BE_REF) {
31353168
if (val_type == IS_CV) {

0 commit comments

Comments
 (0)