Commit 3ebdbda
Fix phpstan/phpstan#11565: Conditional return type takes wrong branch when variable is reassigned
- When processing `$items = iteratorToList($items)` as a statement, the TypeSpecifier
evaluated the conditional return type using the post-assignment scope where `$items`
was already `list<string>`, causing the condition `$iterable is list` to be true
and the return type to resolve to `never`
- Added `removeExpr` method to SpecifiedTypes to filter out entries by expression key
- In TypeSpecifier, when processing an Assign in null context, remove specifiedTypes
that target the assigned variable to prevent the post-assignment type from being
incorrectly narrowed by the conditional return type evaluation
- New regression test in tests/PHPStan/Analyser/nsrt/bug-11565.php1 parent c36922b commit 3ebdbda
File tree
3 files changed
+54
-0
lines changed- src/Analyser
- tests/PHPStan/Analyser/nsrt
3 files changed
+54
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
119 | 119 | | |
120 | 120 | | |
121 | 121 | | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
122 | 137 | | |
123 | 138 | | |
124 | 139 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
788 | 788 | | |
789 | 789 | | |
790 | 790 | | |
| 791 | + | |
| 792 | + | |
| 793 | + | |
791 | 794 | | |
792 | 795 | | |
793 | 796 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
0 commit comments