Skip to content

Commit 222f218

Browse files
committed
Improve is_instanceof inference
When a class is final, it may be treated as !is_instanceof.
1 parent ea3c541 commit 222f218

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

Zend/Optimizer/zend_inference.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2005,8 +2005,13 @@ static uint32_t get_ssa_alias_types(zend_ssa_alias_kind alias) {
20052005
if (var >= 0) { \
20062006
if (ssa_var_info[var].ce != (_ce) || \
20072007
ssa_var_info[var].is_instanceof != (_is_instanceof)) { \
2008-
ssa_var_info[var].ce = (_ce); \
2009-
ssa_var_info[var].is_instanceof = (_is_instanceof); \
2008+
zend_class_entry *__ce = (_ce); \
2009+
bool __is_instanceof = (_is_instanceof); \
2010+
if (__ce && (__ce->ce_flags & ZEND_ACC_FINAL)) { \
2011+
__is_instanceof = false; \
2012+
} \
2013+
ssa_var_info[var].ce = __ce; \
2014+
ssa_var_info[var].is_instanceof = __is_instanceof; \
20102015
if (update_worklist) { \
20112016
add_usages(op_array, ssa, worklist, var); \
20122017
} \

0 commit comments

Comments
 (0)