Skip to content

Commit

Permalink
Fix crash on ErasedType and covers_at_runtime (#11924)
Browse files Browse the repository at this point in the history
Closes #11913
Refs #11273

Co-authored-by: Shantanu <[email protected]>
  • Loading branch information
2 people authored and JukkaL committed Jan 7, 2022
1 parent 73de602 commit 5b3280e
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 2 deletions.
3 changes: 1 addition & 2 deletions mypy/erasetype.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,7 @@ def visit_uninhabited_type(self, t: UninhabitedType) -> ProperType:
return t

def visit_erased_type(self, t: ErasedType) -> ProperType:
# Should not get here.
raise RuntimeError()
return t

def visit_partial_type(self, t: PartialType) -> ProperType:
# Should not get here.
Expand Down
1 change: 1 addition & 0 deletions mypy/subtypes.py
Original file line number Diff line number Diff line change
Expand Up @@ -1171,6 +1171,7 @@ def restrict_subtype_away(t: Type, s: Type, *, ignore_promotions: bool = False)
def covers_at_runtime(item: Type, supertype: Type, ignore_promotions: bool) -> bool:
"""Will isinstance(item, supertype) always return True at runtime?"""
item = get_proper_type(item)
supertype = get_proper_type(supertype)

# Since runtime type checks will ignore type arguments, erase the types.
supertype = erase_type(supertype)
Expand Down
15 changes: 15 additions & 0 deletions test-data/unit/check-inference.test
Original file line number Diff line number Diff line change
Expand Up @@ -3211,6 +3211,21 @@ def test(seq: List[Union[Iterable, Any]]) -> None:
reveal_type(k) # N: Revealed type is "builtins.list[Any]"
[builtins fixtures/list.pyi]

[case testErasedTypeRuntimeCoverage]
# https://github.com/python/mypy/issues/11913
from typing import TypeVar, Type, Generic, Callable, Iterable

class DataType: ...

T1 = TypeVar('T1')
T2 = TypeVar("T2", bound=DataType)

def map(__func: T1) -> None: ...

def collection_from_dict_value(model: Type[T2]) -> None:
map(lambda i: i if isinstance(i, model) else i)
[builtins fixtures/isinstancelist.pyi]

[case testRegression11705_Strict]
# flags: --strict-optional
# See: https://github.com/python/mypy/issues/11705
Expand Down

0 comments on commit 5b3280e

Please sign in to comment.