@@ -3231,20 +3231,30 @@ static zend_always_inline int _zend_update_type_info(
32313231 key_type |= MAY_BE_ARRAY_PACKED ;
32323232 }
32333233 if (t1 & MAY_BE_ARRAY ) {
3234- key_type |= ( MAY_BE_HASH_ONLY (t1 ) || ( t1 & ( MAY_BE_UNDEF | MAY_BE_NULL | MAY_BE_FALSE )) ) ?
3234+ key_type |= MAY_BE_HASH_ONLY (t1 ) ?
32353235 MAY_BE_ARRAY_NUMERIC_HASH : MAY_BE_ARRAY_KEY_LONG ;
32363236 }
32373237 } else {
32383238 if (t2 & (MAY_BE_LONG |MAY_BE_FALSE |MAY_BE_TRUE |MAY_BE_RESOURCE |MAY_BE_DOUBLE )) {
3239- key_type |= (MAY_BE_HASH_ONLY (t1 ) || (t1 & (MAY_BE_UNDEF |MAY_BE_NULL |MAY_BE_FALSE ))) ?
3240- MAY_BE_ARRAY_NUMERIC_HASH : MAY_BE_ARRAY_KEY_LONG ;
3239+ if (t1 & (MAY_BE_UNDEF |MAY_BE_NULL |MAY_BE_FALSE )) {
3240+ key_type |= MAY_BE_ARRAY_PACKED ;
3241+ }
3242+ if (t1 & MAY_BE_ARRAY ) {
3243+ key_type |= MAY_BE_HASH_ONLY (t1 ) ?
3244+ MAY_BE_ARRAY_NUMERIC_HASH : MAY_BE_ARRAY_KEY_LONG ;
3245+ }
32413246 }
32423247 if (t2 & MAY_BE_STRING ) {
32433248 key_type |= MAY_BE_ARRAY_KEY_STRING ;
32443249 if (opline -> op2_type != IS_CONST ) {
32453250 // FIXME: numeric string
3246- key_type |= (MAY_BE_HASH_ONLY (t1 ) || (t1 & (MAY_BE_UNDEF |MAY_BE_NULL |MAY_BE_FALSE ))) ?
3247- MAY_BE_ARRAY_NUMERIC_HASH : MAY_BE_ARRAY_KEY_LONG ;
3251+ if (t1 & (MAY_BE_UNDEF |MAY_BE_NULL |MAY_BE_FALSE )) {
3252+ key_type |= MAY_BE_ARRAY_PACKED ;
3253+ }
3254+ if (t1 & MAY_BE_ARRAY ) {
3255+ key_type |= MAY_BE_HASH_ONLY (t1 ) ?
3256+ MAY_BE_ARRAY_NUMERIC_HASH : MAY_BE_ARRAY_KEY_LONG ;
3257+ }
32483258 }
32493259 }
32503260 if (t2 & (MAY_BE_UNDEF | MAY_BE_NULL )) {
0 commit comments