mirror of
https://github.com/php/php-src.git
synced 2024-09-21 18:07:23 +00:00
Fixed type inference (it's safe to ignore reference counting narrowing)
This commit is contained in:
parent
aff115547f
commit
86430e8e01
@ -1860,6 +1860,11 @@ static uint32_t get_ssa_alias_types(zend_ssa_alias_kind alias) {
|
||||
} \
|
||||
if (ssa_var_info[__var].type != __type) { \
|
||||
if (ssa_var_info[__var].type & ~__type) { \
|
||||
if ((ssa_var_info[__var].type & ~__type & \
|
||||
~(MAY_BE_RC1|MAY_BE_RCN)) == 0) { \
|
||||
ssa_var_info[__var].type |= __type; \
|
||||
break; \
|
||||
} \
|
||||
emit_type_narrowing_warning(op_array, ssa, __var); \
|
||||
return FAILURE; \
|
||||
} \
|
||||
|
163
ext/opcache/tests/opt/inference_001.phpt
Normal file
163
ext/opcache/tests/opt/inference_001.phpt
Normal file
@ -0,0 +1,163 @@
|
||||
--TEST--
|
||||
Type inference 001: Invalid type narrowing warning
|
||||
--INI--
|
||||
opcache.enable=1
|
||||
opcache.enable_cli=1
|
||||
opcache.optimization_level=-1
|
||||
--FILE--
|
||||
<?php
|
||||
function test() {
|
||||
$j = 0;
|
||||
for ($i = 0; $i = 10; $i++) {
|
||||
$e;
|
||||
$a = $a;
|
||||
$obj->$e;
|
||||
$i += $a;
|
||||
$j++;
|
||||
$e;
|
||||
$a == $Z + $a .= $i+= $a;
|
||||
$j++;
|
||||
$e;
|
||||
$a == $Z + $j++;
|
||||
$e;
|
||||
$a == $Z + $a = $a + $b = $i += $a;
|
||||
$obj = new stdClass;
|
||||
$obj->prop1 = set_error_handler(function () {
|
||||
$$GLOBALS['a'] = null;
|
||||
});
|
||||
$obj->$a .= $i += $a;
|
||||
$obj = new stdClass;
|
||||
$obj->prop1 = $j++;
|
||||
$e;
|
||||
$a == $Z + $a = $a + $j++;
|
||||
$e;
|
||||
$a == $Z + $a = $a + $b = $aa = $a;
|
||||
}
|
||||
}
|
||||
test();
|
||||
?>
|
||||
DONE
|
||||
--EXPECTF--
|
||||
Warning: Undefined variable $a in %sinference_001.php on line 6
|
||||
|
||||
Warning: Undefined variable $obj in %sinference_001.php on line 7
|
||||
|
||||
Warning: Undefined variable $e in %sinference_001.php on line 7
|
||||
|
||||
Warning: Attempt to read property "" on null in %sinference_001.php on line 7
|
||||
|
||||
Warning: Undefined variable $Z in %sinference_001.php on line 11
|
||||
|
||||
Warning: Undefined variable $Z in %sinference_001.php on line 14
|
||||
|
||||
Warning: Undefined variable $Z in %sinference_001.php on line 16
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Warning: Array to string conversion in %sinference_001.php on line 19
|
||||
|
||||
Fatal error: Uncaught TypeError: Unsupported operand types: null + string in %sinference_001.php:11
|
||||
Stack trace:
|
||||
#0 %sinference_001.php(30): test()
|
||||
#1 {main}
|
||||
thrown in %sinference_001.php on line 11
|
Loading…
Reference in New Issue
Block a user