mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +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) \
|
#define UPDATE_SSA_OBJ_TYPE(_ce, _is_instanceof, var) \
|
||||||
do { \
|
do { \
|
||||||
if (var >= 0) { \
|
if (var >= 0) { \
|
||||||
if (ssa_var_info[var].ce != (_ce) || \
|
zend_class_entry *__ce = (_ce); \
|
||||||
ssa_var_info[var].is_instanceof != (_is_instanceof)) { \
|
bool __is_instanceof = (_is_instanceof); \
|
||||||
ssa_var_info[var].ce = (_ce); \
|
if (__ce && (__ce->ce_flags & ZEND_ACC_FINAL)) { \
|
||||||
ssa_var_info[var].is_instanceof = (_is_instanceof); \
|
__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) { \
|
if (update_worklist) { \
|
||||||
add_usages(op_array, ssa, worklist, var); \
|
add_usages(op_array, ssa, worklist, var); \
|
||||||
} \
|
} \
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue