File tree 1 file changed +15
-1
lines changed 1 file changed +15
-1
lines changed Original file line number Diff line number Diff line change @@ -3369,8 +3369,22 @@ static zend_always_inline zend_result _zend_update_type_info(
3369
3369
ce = zend_optimizer_get_class_entry_from_op1 (script , op_array , opline );
3370
3370
if (ce ) {
3371
3371
UPDATE_SSA_OBJ_TYPE (ce , 0 , ssa_op -> result_def );
3372
+ /* New objects without constructors cannot escape. */
3373
+ if (!ce -> constructor
3374
+ && !ce -> create_object
3375
+ && ce -> default_object_handlers -> get_constructor == zend_std_get_constructor ) {
3376
+ tmp &= ~MAY_BE_RCN ;
3377
+ }
3372
3378
} else if ((t1 & MAY_BE_CLASS ) && ssa_op -> op1_use >= 0 && ssa_var_info [ssa_op -> op1_use ].ce ) {
3373
- 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
+ ce = ssa_var_info [ssa_op -> op1_use ].ce ;
3380
+ UPDATE_SSA_OBJ_TYPE (ce , ssa_var_info [ssa_op -> op1_use ].is_instanceof , ssa_op -> result_def );
3381
+ /* New objects without constructors cannot escape. */
3382
+ if (!ssa_var_info [ssa_op -> result_def ].is_instanceof
3383
+ && !ce -> constructor
3384
+ && !ce -> create_object
3385
+ && ce -> default_object_handlers -> get_constructor == zend_std_get_constructor ) {
3386
+ tmp &= ~MAY_BE_RCN ;
3387
+ }
3374
3388
} else {
3375
3389
UPDATE_SSA_OBJ_TYPE (NULL , 0 , ssa_op -> result_def );
3376
3390
}
You can’t perform that action at this time.
0 commit comments