File tree 3 files changed +40
-1
lines changed
3 files changed +40
-1
lines changed Original file line number Diff line number Diff line change @@ -2828,8 +2828,15 @@ static zend_always_inline zend_result _zend_update_type_info(
2828
2828
/* DOUBLE may be auto-converted to LONG */
2829
2829
tmp |= MAY_BE_LONG ;
2830
2830
tmp &= ~MAY_BE_DOUBLE ;
2831
+ } else if ((t1 & (MAY_BE_LONG |MAY_BE_DOUBLE |MAY_BE_STRING )) == MAY_BE_STRING
2832
+ && (tmp & (MAY_BE_LONG |MAY_BE_DOUBLE ))) {
2833
+ /* LONG/DOUBLE may be auto-converted to STRING */
2834
+ tmp |= MAY_BE_STRING ;
2835
+ tmp &= ~(MAY_BE_LONG |MAY_BE_DOUBLE );
2831
2836
}
2832
2837
tmp &= t1 ;
2838
+ } else {
2839
+ tmp |= MAY_BE_LONG | MAY_BE_STRING ;
2833
2840
}
2834
2841
} else if (opline -> opcode == ZEND_ASSIGN_STATIC_PROP_OP ) {
2835
2842
/* The return value must also satisfy the property type */
@@ -2840,8 +2847,15 @@ static zend_always_inline zend_result _zend_update_type_info(
2840
2847
/* DOUBLE may be auto-converted to LONG */
2841
2848
tmp |= MAY_BE_LONG ;
2842
2849
tmp &= ~MAY_BE_DOUBLE ;
2850
+ } else if ((t1 & (MAY_BE_LONG |MAY_BE_DOUBLE |MAY_BE_STRING )) == MAY_BE_STRING
2851
+ && (tmp & (MAY_BE_LONG |MAY_BE_DOUBLE ))) {
2852
+ /* LONG/DOUBLE may be auto-converted to STRING */
2853
+ tmp |= MAY_BE_STRING ;
2854
+ tmp &= ~(MAY_BE_LONG |MAY_BE_DOUBLE );
2843
2855
}
2844
2856
tmp &= t1 ;
2857
+ } else {
2858
+ tmp |= MAY_BE_LONG | MAY_BE_STRING ;
2845
2859
}
2846
2860
} else {
2847
2861
if (tmp & MAY_BE_REF ) {
Original file line number Diff line number Diff line change @@ -799,7 +799,9 @@ zend_class_entry *zend_optimizer_get_class_entry(
799
799
}
800
800
801
801
ce = zend_hash_find_ptr (CG (class_table ), lcname );
802
- if (ce && ce -> type == ZEND_INTERNAL_CLASS ) {
802
+ if (ce
803
+ && (ce -> type == ZEND_INTERNAL_CLASS
804
+ || (op_array && ce -> info .user .filename == op_array -> filename ))) {
803
805
return ce ;
804
806
}
805
807
Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ JIT ASSIGN_STATIC_PROP_OP: 001
3
+ --INI--
4
+ opcache.enable=1
5
+ opcache.enable_cli=1
6
+ opcache.file_update_protection=0
7
+ opcache.jit_buffer_size=1M
8
+ --EXTENSIONS--
9
+ opcache
10
+ --FILE--
11
+ <?php
12
+ function ref () {
13
+ }
14
+ class Foo {
15
+ static $ i ;
16
+ static string $ s ;
17
+ }
18
+ Foo::$ i = 1 ;
19
+ Foo::$ s = Foo::$ i ;
20
+ var_dump (Foo::$ s -= ref ());
21
+ ?>
22
+ --EXPECT--
23
+ string(1) "1"
You can’t perform that action at this time.
0 commit comments