Bug report
When two early-return/throw guards interact, PHPStan learns a conditional implication from the second guard's negated branch but drops one of the conjuncts, then chains it with a fact from the first guard. The result is a type that is narrower than reality — a reachable value is dropped.
Code snippet that reproduces the problem
https://phpstan.org/r/45b5a0db-a0a7-4df7-a2bd-2438fe30072d
Expected output
Dumped type: int|null
Did PHPStan help you today? Did it make you happy in any way?
No response
Bug report
When two early-return/throw guards interact, PHPStan learns a conditional implication from the second guard's negated branch but drops one of the conjuncts, then chains it with a fact from the first guard. The result is a type that is narrower than reality — a reachable value is dropped.
Code snippet that reproduces the problem
https://phpstan.org/r/45b5a0db-a0a7-4df7-a2bd-2438fe30072d
Expected output
Dumped type: int|nullDid PHPStan help you today? Did it make you happy in any way?
No response