mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
Improve is_instanceof inference (#13238)
When a class is final, it may be treated as !is_instanceof.
This commit is contained in:
@@ -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); \
|
||||
} \
|
||||
|
||||
Reference in New Issue
Block a user