File tree 1 file changed +10
-0
lines changed 1 file changed +10
-0
lines changed Original file line number Diff line number Diff line change @@ -3376,9 +3376,19 @@ static zend_always_inline zend_result _zend_update_type_info(
3376
3376
UPDATE_SSA_OBJ_TYPE (ce , 0 , ssa_op -> result_def );
3377
3377
} else if ((t1 & MAY_BE_CLASS ) && ssa_op -> op1_use >= 0 && ssa_var_info [ssa_op -> op1_use ].ce ) {
3378
3378
UPDATE_SSA_OBJ_TYPE (ssa_var_info [ssa_op -> op1_use ].ce , ssa_var_info [ssa_op -> op1_use ].is_instanceof , ssa_op -> result_def );
3379
+ if (!ssa_var_info [ssa_op -> result_def ].is_instanceof ) {
3380
+ ce = ssa_var_info [ssa_op -> op1_use ].ce ;
3381
+ }
3379
3382
} else {
3380
3383
UPDATE_SSA_OBJ_TYPE (NULL , 0 , ssa_op -> result_def );
3381
3384
}
3385
+ /* New objects without constructors cannot escape. */
3386
+ if (ce
3387
+ && !ce -> constructor
3388
+ && !ce -> create_object
3389
+ && ce -> default_object_handlers -> get_constructor == zend_std_get_constructor ) {
3390
+ tmp &= ~MAY_BE_RCN ;
3391
+ }
3382
3392
UPDATE_SSA_TYPE (tmp , ssa_op -> result_def );
3383
3393
break ;
3384
3394
case ZEND_CLONE :
You can’t perform that action at this time.
0 commit comments