SIGN IN SIGN UP

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