mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Improve is_instanceof inference (#13238)
When a class is final, it may be treated as !is_instanceof.
This commit is contained in:
parent
52dba99d47
commit
34e2dc5697
1 changed files with 9 additions and 4 deletions
|
@ -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); \
|
||||
} \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue