diff --git a/Zend/Optimizer/zend_inference.c b/Zend/Optimizer/zend_inference.c index af6c301fd9347..046d346f8d7d9 100644 --- a/Zend/Optimizer/zend_inference.c +++ b/Zend/Optimizer/zend_inference.c @@ -2003,10 +2003,15 @@ static uint32_t get_ssa_alias_types(zend_ssa_alias_kind alias) { #define UPDATE_SSA_OBJ_TYPE(_ce, _is_instanceof, var) \ do { \ if (var >= 0) { \ - if (ssa_var_info[var].ce != (_ce) || \ - ssa_var_info[var].is_instanceof != (_is_instanceof)) { \ - ssa_var_info[var].ce = (_ce); \ - ssa_var_info[var].is_instanceof = (_is_instanceof); \ + zend_class_entry *__ce = (_ce); \ + bool __is_instanceof = (_is_instanceof); \ + if (__ce && (__ce->ce_flags & ZEND_ACC_FINAL)) { \ + __is_instanceof = false; \ + } \ + if (ssa_var_info[var].ce != __ce || \ + ssa_var_info[var].is_instanceof != __is_instanceof) { \ + ssa_var_info[var].ce = __ce; \ + ssa_var_info[var].is_instanceof = __is_instanceof; \ if (update_worklist) { \ add_usages(op_array, ssa, worklist, var); \ } \