-
-
Notifications
You must be signed in to change notification settings - Fork 946
Closed
Labels
Milestone
Description
Bug report
Since: 2.1.34
PHPStan appears to cache the first call to count as int<1, max> and then further calls to count report errors with comparison operators such as greater.alwaysTrue, even though the array may have been mutated with unset.
Inlined Example Code
$list = [
'a',
'b',
'c',
];
/** @param list<string> $list */
function acceptList(array $list): bool {
if (count($list) < 1) {
return false;
}
$compare = ['a', 'b', 'c'];
foreach($list as $key => $item) {
foreach ($compare as $k => $v) {
if ($item === $v && $v !== 'a') {
unset($list[$key]);
}
}
}
if (count($list) > 0) {
return true;
}
return false;
}
assert(acceptList($list) === true);Code snippet that reproduces the problem
https://phpstan.org/r/40d2cb57-5926-4ffd-b1c9-8492d3c812e3
Expected output
No errors
Did PHPStan help you today? Did it make you happy in any way?
Thanks for PHPStan! Great perf improvements in the latest release 👍
Reactions are currently unavailable