Skip to content

Commit

Permalink
Fix verify type jit for complex type masks
Browse files Browse the repository at this point in the history
We should not try to check things like MAY_BE_CALLABLE in the fast
path, because those aren't real types. This is only actively wrong
for the concrete_type case, for the mask case it just uses an
unnecessarily large immediate.
  • Loading branch information
nikic committed Jul 27, 2020
1 parent e0aa272 commit f9f6123
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions ext/opcache/jit/zend_jit_x86.dasc
Original file line number Diff line number Diff line change
Expand Up @@ -10891,7 +10891,7 @@ static int zend_jit_verify_arg_type(dasm_State **Dst, const zend_op *opline, zen
{
zend_jit_addr res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var);
zend_bool in_cold = 0;
uint32_t type_mask = ZEND_TYPE_PURE_MASK(arg_info->type);
uint32_t type_mask = ZEND_TYPE_PURE_MASK(arg_info->type) & MAY_BE_ANY;
zend_reg tmp_reg = (type_mask == 0 || is_power_of_two(type_mask)) ? ZREG_FCARG1a : ZREG_R0;

if (ZEND_ARG_SEND_MODE(arg_info)) {
Expand Down Expand Up @@ -12029,7 +12029,7 @@ static zend_bool zend_jit_verify_return_type(dasm_State **Dst, const zend_op *op

| LOAD_ZVAL_ADDR r0, op1_addr

uint32_t type_mask = ZEND_TYPE_PURE_MASK(arg_info->type);
uint32_t type_mask = ZEND_TYPE_PURE_MASK(arg_info->type) & MAY_BE_ANY;
if (type_mask == 0) {
| jmp >7
} else if (is_power_of_two(type_mask)) {
Expand Down

0 comments on commit f9f6123

Please sign in to comment.