Fix various crashes on recursive type variable defaults (#21491)
Fixes https://github.com/python/mypy/issues/17716 Fixes https://github.com/python/mypy/issues/20698 Fixes https://github.com/python/mypy/issues/21128 Fixes https://github.com/python/mypy/issues/21269 Although the main idea is relatively simple (replace explicit type variable defaults with `Any` in cases where they would cause infinite recursion), this required a lot of "plumbing", because: * We always call `fix_instance()` eagerly and early. * There are four different cases to handle (classes vs aliases, and old style vs new style). * Relevant pieces of information are available in "distant" places (and I don't want to add any global state). Some additional notes: * I clean-up some weirdness with deferral on type variable defaults with placeholders (especially in type aliases). * I remove an unwarranted `get_proper_type()` call during semantic analysis. * Now we handle rare edge case of unused alias type variables in `BoolTypeQuery` (possible with new style aliases). * Type variable defaults should be considered in `__eq__()` to correctly detect progress.
I
Ivan Levkivskyi committed
47ca4c247c38b77a1267b12127db1eee6c89487a
Parent: 37ee432
Committed by GitHub <noreply@github.com>
on 5/26/2026, 12:11:09 PM