@@ -2409,12 +2409,10 @@ static zend_always_inline int _zend_update_type_info(
2409
2409
if (ssa_op -> op1_def >= 0 ) {
2410
2410
tmp = t1 ;
2411
2411
if ((t1 & (MAY_BE_ARRAY |MAY_BE_OBJECT )) &&
2412
- (opline -> op1_type == IS_CV ) &&
2413
2412
(opline -> extended_value == IS_ARRAY ||
2414
2413
opline -> extended_value == IS_OBJECT )) {
2415
2414
tmp |= MAY_BE_RCN ;
2416
2415
} else if ((t1 & MAY_BE_STRING ) &&
2417
- (opline -> op1_type == IS_CV ) &&
2418
2416
opline -> extended_value == IS_STRING ) {
2419
2417
tmp |= MAY_BE_RCN ;
2420
2418
}
@@ -2454,7 +2452,7 @@ static zend_always_inline int _zend_update_type_info(
2454
2452
case ZEND_COPY_TMP :
2455
2453
if (ssa_op -> op1_def >= 0 ) {
2456
2454
tmp = t1 ;
2457
- if (( t1 & (MAY_BE_RC1 |MAY_BE_REF )) && ( opline -> op1_type == IS_CV )) {
2455
+ if (t1 & (MAY_BE_RC1 |MAY_BE_REF )) {
2458
2456
tmp |= MAY_BE_RCN ;
2459
2457
}
2460
2458
UPDATE_SSA_TYPE (tmp , ssa_op -> op1_def );
@@ -2729,7 +2727,7 @@ static zend_always_inline int _zend_update_type_info(
2729
2727
}
2730
2728
UPDATE_SSA_TYPE (tmp , ssa_op -> result_def );
2731
2729
}
2732
- if ((opline + 1 ) -> op1_type == IS_CV && ( ssa_op + 1 )-> op1_def >= 0 ) {
2730
+ if ((ssa_op + 1 )-> op1_def >= 0 ) {
2733
2731
opline ++ ;
2734
2732
ssa_op ++ ;
2735
2733
tmp = OP1_INFO_EX ();
@@ -2763,14 +2761,27 @@ static zend_always_inline int _zend_update_type_info(
2763
2761
UPDATE_SSA_OBJ_TYPE (ce , 1 , ssa_op -> result_def );
2764
2762
}
2765
2763
}
2766
- if ((opline + 1 )-> op1_type == IS_CV ) {
2764
+ if ((ssa_op + 1 )-> op1_def >= 0 ) {
2767
2765
opline ++ ;
2768
2766
ssa_op ++ ;
2769
2767
tmp = OP1_INFO_EX ();
2770
- if (tmp & (MAY_BE_ANY | MAY_BE_REF )) {
2771
- if (tmp & MAY_BE_RC1 ) {
2772
- tmp |= MAY_BE_RCN ;
2773
- }
2768
+ if (tmp & MAY_BE_RC1 ) {
2769
+ tmp |= MAY_BE_RCN ;
2770
+ }
2771
+ UPDATE_SSA_TYPE (tmp , ssa_op -> op1_def );
2772
+ }
2773
+ break ;
2774
+ case ZEND_ASSIGN_STATIC_PROP :
2775
+ if (ssa_op -> result_def >= 0 ) {
2776
+ tmp = MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF | MAY_BE_RC1 | MAY_BE_RCN ;
2777
+ UPDATE_SSA_TYPE (tmp , ssa_op -> result_def );
2778
+ }
2779
+ if ((ssa_op + 1 )-> op1_def >= 0 ) {
2780
+ opline ++ ;
2781
+ ssa_op ++ ;
2782
+ tmp = OP1_INFO_EX ();
2783
+ if (tmp & MAY_BE_RC1 ) {
2784
+ tmp |= MAY_BE_RCN ;
2774
2785
}
2775
2786
UPDATE_SSA_TYPE (tmp , ssa_op -> op1_def );
2776
2787
}
@@ -2798,12 +2809,10 @@ static zend_always_inline int _zend_update_type_info(
2798
2809
}
2799
2810
break ;
2800
2811
case ZEND_ASSIGN :
2801
- if (opline -> op2_type == IS_CV && ssa_op -> op2_def >= 0 ) {
2812
+ if (ssa_op -> op2_def >= 0 ) {
2802
2813
tmp = t2 ;
2803
- if (tmp & (MAY_BE_ANY | MAY_BE_REF )) {
2804
- if (tmp & MAY_BE_RC1 ) {
2805
- tmp |= MAY_BE_RCN ;
2806
- }
2814
+ if (tmp & MAY_BE_RC1 ) {
2815
+ tmp |= MAY_BE_RCN ;
2807
2816
}
2808
2817
UPDATE_SSA_TYPE (tmp , ssa_op -> op2_def );
2809
2818
}
@@ -2918,7 +2927,7 @@ static zend_always_inline int _zend_update_type_info(
2918
2927
case ZEND_SEND_VAR :
2919
2928
if (ssa_op -> op1_def >= 0 ) {
2920
2929
tmp = t1 ;
2921
- if (( t1 & (MAY_BE_RC1 |MAY_BE_REF )) && ( opline -> op1_type == IS_CV )) {
2930
+ if (t1 & (MAY_BE_RC1 |MAY_BE_REF )) {
2922
2931
tmp |= MAY_BE_RCN ;
2923
2932
}
2924
2933
UPDATE_SSA_TYPE (tmp , ssa_op -> op1_def );
@@ -3102,7 +3111,7 @@ static zend_always_inline int _zend_update_type_info(
3102
3111
break ;
3103
3112
case ZEND_INIT_ARRAY :
3104
3113
case ZEND_ADD_ARRAY_ELEMENT :
3105
- if (opline -> op1_type == IS_CV && ssa_op -> op1_def >= 0 ) {
3114
+ if (ssa_op -> op1_def >= 0 ) {
3106
3115
if (opline -> extended_value & ZEND_ARRAY_ELEMENT_REF ) {
3107
3116
tmp = (MAY_BE_REF | t1 ) & ~(MAY_BE_UNDEF |MAY_BE_RC1 |MAY_BE_RCN );
3108
3117
if (t1 & MAY_BE_UNDEF ) {
@@ -3190,10 +3199,8 @@ static zend_always_inline int _zend_update_type_info(
3190
3199
tmp = t1 ;
3191
3200
if (opline -> opcode == ZEND_FE_RESET_RW ) {
3192
3201
tmp |= MAY_BE_REF ;
3193
- } else {
3194
- if ((t1 & MAY_BE_RC1 ) && opline -> op1_type != IS_TMP_VAR ) {
3195
- tmp |= MAY_BE_RCN ;
3196
- }
3202
+ } else if (t1 & MAY_BE_RC1 ) {
3203
+ tmp |= MAY_BE_RCN ;
3197
3204
}
3198
3205
UPDATE_SSA_TYPE (tmp , ssa_op -> op1_def );
3199
3206
COPY_SSA_OBJ_TYPE (ssa_op -> op1_use , ssa_op -> op1_def );
0 commit comments