Commit 2c18f12
Fix match(true) exhaustiveness for complementary integer comparisons
- Added resolveComplementaryComparison() method to MutatingScope that checks
if the complement of a comparison expression has a stored type in the scope
- When resolving $a >= $b, if $a < $b is already stored as false (or true),
the complement is returned, allowing match(true) to detect exhaustive arms
- Handles all four comparison pairs: < / >=, <= / >, > / <=, >= / <
- New regression test in tests/PHPStan/Rules/Comparison/data/bug-5610.php
Closes phpstan/phpstan#56101 parent 2681e50 commit 2c18f12
3 files changed
Lines changed: 65 additions & 4 deletions
File tree
- src/Analyser
- tests/PHPStan/Rules/Comparison
- data
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
987 | 987 | | |
988 | 988 | | |
989 | 989 | | |
990 | | - | |
| 990 | + | |
| 991 | + | |
991 | 992 | | |
992 | 993 | | |
993 | 994 | | |
994 | | - | |
| 995 | + | |
| 996 | + | |
995 | 997 | | |
996 | 998 | | |
997 | 999 | | |
998 | | - | |
| 1000 | + | |
| 1001 | + | |
999 | 1002 | | |
1000 | 1003 | | |
1001 | 1004 | | |
1002 | | - | |
| 1005 | + | |
| 1006 | + | |
1003 | 1007 | | |
1004 | 1008 | | |
1005 | 1009 | | |
| |||
1609 | 1613 | | |
1610 | 1614 | | |
1611 | 1615 | | |
| 1616 | + | |
| 1617 | + | |
| 1618 | + | |
| 1619 | + | |
| 1620 | + | |
| 1621 | + | |
| 1622 | + | |
| 1623 | + | |
| 1624 | + | |
| 1625 | + | |
| 1626 | + | |
| 1627 | + | |
| 1628 | + | |
| 1629 | + | |
| 1630 | + | |
| 1631 | + | |
| 1632 | + | |
| 1633 | + | |
1612 | 1634 | | |
1613 | 1635 | | |
1614 | 1636 | | |
| |||
Lines changed: 6 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
446 | 446 | | |
447 | 447 | | |
448 | 448 | | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
449 | 455 | | |
450 | 456 | | |
451 | 457 | | |
| |||
| 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 | + | |
0 commit comments