@@ -1849,7 +1849,7 @@ static uint32_t get_ssa_alias_types(zend_ssa_alias_kind alias) {
1849
1849
} \
1850
1850
if (ssa_var_info [__var ].type != __type ) { \
1851
1851
if (ssa_var_info [__var ].type & ~__type ) { \
1852
- handle_type_narrowing (op_array , ssa , worklist , \
1852
+ emit_type_narrowing_warning (op_array , ssa , worklist ,\
1853
1853
__var , ssa_var_info [__var ].type , __type ); \
1854
1854
return FAILURE ; \
1855
1855
} \
@@ -1924,87 +1924,12 @@ static void add_usages(const zend_op_array *op_array, zend_ssa *ssa, zend_bitset
1924
1924
}
1925
1925
}
1926
1926
1927
- static void reset_dependent_vars (const zend_op_array * op_array , zend_ssa * ssa , zend_bitset worklist , int var )
1927
+ static void emit_type_narrowing_warning (const zend_op_array * op_array , zend_ssa * ssa , zend_bitset worklist , int var , uint32_t old_type , uint32_t new_type )
1928
1928
{
1929
- zend_ssa_op * ssa_ops = ssa -> ops ;
1930
- zend_ssa_var * ssa_vars = ssa -> vars ;
1931
- zend_ssa_var_info * ssa_var_info = ssa -> var_info ;
1932
- zend_ssa_phi * p ;
1933
- int use ;
1934
-
1935
- p = ssa_vars [var ].phi_use_chain ;
1936
- while (p ) {
1937
- if (ssa_var_info [p -> ssa_var ].type ) {
1938
- ssa_var_info [p -> ssa_var ].type = 0 ;
1939
- zend_bitset_incl (worklist , p -> ssa_var );
1940
- reset_dependent_vars (op_array , ssa , worklist , p -> ssa_var );
1941
- }
1942
- p = zend_ssa_next_use_phi (ssa , var , p );
1943
- }
1944
- use = ssa_vars [var ].use_chain ;
1945
- while (use >= 0 ) {
1946
- if (ssa_ops [use ].op1_def >= 0 && ssa_var_info [ssa_ops [use ].op1_def ].type ) {
1947
- ssa_var_info [ssa_ops [use ].op1_def ].type = 0 ;
1948
- zend_bitset_incl (worklist , ssa_ops [use ].op1_def );
1949
- reset_dependent_vars (op_array , ssa , worklist , ssa_ops [use ].op1_def );
1950
- }
1951
- if (ssa_ops [use ].op2_def >= 0 && ssa_var_info [ssa_ops [use ].op2_def ].type ) {
1952
- ssa_var_info [ssa_ops [use ].op2_def ].type = 0 ;
1953
- zend_bitset_incl (worklist , ssa_ops [use ].op2_def );
1954
- reset_dependent_vars (op_array , ssa , worklist , ssa_ops [use ].op2_def );
1955
- }
1956
- if (ssa_ops [use ].result_def >= 0 && ssa_var_info [ssa_ops [use ].result_def ].type ) {
1957
- ssa_var_info [ssa_ops [use ].result_def ].type = 0 ;
1958
- zend_bitset_incl (worklist , ssa_ops [use ].result_def );
1959
- reset_dependent_vars (op_array , ssa , worklist , ssa_ops [use ].result_def );
1960
- }
1961
- if (op_array -> opcodes [use + 1 ].opcode == ZEND_OP_DATA ) {
1962
- if (ssa_ops [use + 1 ].op1_def >= 0 && ssa_var_info [ssa_ops [use + 1 ].op1_def ].type ) {
1963
- ssa_var_info [ssa_ops [use + 1 ].op1_def ].type = 0 ;
1964
- zend_bitset_incl (worklist , ssa_ops [use + 1 ].op1_def );
1965
- reset_dependent_vars (op_array , ssa , worklist , ssa_ops [use + 1 ].op1_def );
1966
- }
1967
- if (ssa_ops [use + 1 ].op2_def >= 0 && ssa_var_info [ssa_ops [use + 1 ].op2_def ].type ) {
1968
- ssa_var_info [ssa_ops [use + 1 ].op2_def ].type = 0 ;
1969
- zend_bitset_incl (worklist , ssa_ops [use + 1 ].op2_def );
1970
- reset_dependent_vars (op_array , ssa , worklist , ssa_ops [use + 1 ].op2_def );
1971
- }
1972
- if (ssa_ops [use + 1 ].result_def >= 0 && ssa_var_info [ssa_ops [use + 1 ].result_def ].type ) {
1973
- ssa_var_info [ssa_ops [use + 1 ].result_def ].type = 0 ;
1974
- zend_bitset_incl (worklist , ssa_ops [use + 1 ].result_def );
1975
- reset_dependent_vars (op_array , ssa , worklist , ssa_ops [use + 1 ].result_def );
1976
- }
1977
- }
1978
- use = zend_ssa_next_use (ssa_ops , var , use );
1979
- }
1980
- #ifdef SYM_RANGE
1981
- /* Process symbolic control-flow constraints */
1982
- p = ssa -> vars [var ].sym_use_chain ;
1983
- while (p ) {
1984
- ssa_var_info [p -> ssa_var ].type = 0 ;
1985
- zend_bitset_incl (worklist , p -> ssa_var );
1986
- reset_dependent_vars (op_array , ssa , worklist , p -> ssa_var );
1987
- p = p -> sym_use_chain ;
1988
- }
1989
- #endif
1990
- }
1991
-
1992
- static void handle_type_narrowing (const zend_op_array * op_array , zend_ssa * ssa , zend_bitset worklist , int var , uint32_t old_type , uint32_t new_type )
1993
- {
1994
- if (1 ) {
1995
- /* Right now, this is always a bug */
1996
- int def_op_num = ssa -> vars [var ].definition ;
1997
- const zend_op * def_opline = def_op_num >= 0 ? & op_array -> opcodes [def_op_num ] : NULL ;
1998
- const char * def_op_name = def_opline ? zend_get_opcode_name (def_opline -> opcode ) : "PHI" ;
1999
- zend_error (E_WARNING , "Narrowing occurred during type inference of %s. Please file a bug report on bugs.php.net" , def_op_name );
2000
- } else {
2001
- /* if new_type set resets some bits from old_type set
2002
- * We have completely recalculate types of some dependent SSA variables
2003
- * (this may occurs mainly because of incremental inter-precudure
2004
- * type inference)
2005
- */
2006
- reset_dependent_vars (op_array , ssa , worklist , var );
2007
- }
1929
+ int def_op_num = ssa -> vars [var ].definition ;
1930
+ const zend_op * def_opline = def_op_num >= 0 ? & op_array -> opcodes [def_op_num ] : NULL ;
1931
+ const char * def_op_name = def_opline ? zend_get_opcode_name (def_opline -> opcode ) : "PHI" ;
1932
+ zend_error (E_WARNING , "Narrowing occurred during type inference of %s. Please file a bug report on bugs.php.net" , def_op_name );
2008
1933
}
2009
1934
2010
1935
uint32_t zend_array_element_type (uint32_t t1 , int write , int insert )
0 commit comments