diff --git a/ext/opcache/jit/zend_jit_trace.c b/ext/opcache/jit/zend_jit_trace.c index 26f69b19d08..fcdcad1507d 100644 --- a/ext/opcache/jit/zend_jit_trace.c +++ b/ext/opcache/jit/zend_jit_trace.c @@ -4513,7 +4513,9 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par if (((res_info & (MAY_BE_ANY|MAY_BE_GUARD)) == (MAY_BE_LONG|MAY_BE_GUARD) || (res_info & (MAY_BE_ANY|MAY_BE_GUARD)) == (MAY_BE_DOUBLE|MAY_BE_GUARD)) && has_concrete_type(op1_info) - && has_concrete_type(op2_info)) { + && (op1_info & (MAY_BE_LONG|MAY_BE_DOUBLE)) + && has_concrete_type(op2_info) + && (op2_info & (MAY_BE_LONG|MAY_BE_DOUBLE))) { ssa->var_info[ssa_op->result_def].type &= ~MAY_BE_GUARD; } } diff --git a/ext/opcache/tests/jit/mul_010.phpt b/ext/opcache/tests/jit/mul_010.phpt new file mode 100644 index 00000000000..6c94f816448 --- /dev/null +++ b/ext/opcache/tests/jit/mul_010.phpt @@ -0,0 +1,32 @@ +--TEST-- +JIT MUL: 010 incorrect guard elimination +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +--FILE-- +getMessage() . "\n"; +} +?> +--EXPECT-- +Unsupported operand types: string * float