Skip to content

Crash in lambda expression as generic argument #8230

Description

@ilevkivskyi

This test crashes on current master (and causes troubles internally):

[case testFilterIn]
from typing import List, TypeVar, Callable

T = TypeVar('T')
def filter(f: Callable[[T], bool], it: List[T]) -> List[T]: ...

xs: List[int]
filter(lambda x: x in [1, 2] and bool(), [3, 4])
[builtins fixtures/list.pyi]

with a traceback that ends in

  File "/Users/ilevkivskyi/src/mypy/mypy/checkexpr.py", line 942, in check_callable_call
    callee, args, arg_kinds, formal_to_actual, context)
  File "/Users/ilevkivskyi/src/mypy/mypy/checkexpr.py", line 1145, in infer_function_type_arguments
    callee_type, args, arg_kinds, formal_to_actual)
  File "/Users/ilevkivskyi/src/mypy/mypy/checkexpr.py", line 1043, in infer_arg_types_in_context
    res[ai] = self.accept(args[ai], callee.arg_types[i])
  File "/Users/ilevkivskyi/src/mypy/mypy/checkexpr.py", line 3723, in accept
    typ = node.accept(self)
  File "/Users/ilevkivskyi/src/mypy/mypy/nodes.py", line 1852, in accept
    return visitor.visit_lambda_expr(self)
  File "/Users/ilevkivskyi/src/mypy/mypy/checkexpr.py", line 3334, in visit_lambda_expr
    self.chk.check_func_item(e, type_override=type_override)
  File "/Users/ilevkivskyi/src/mypy/mypy/checker.py", line 790, in check_func_item
    self.check_func_def(defn, typ, name)
  File "/Users/ilevkivskyi/src/mypy/mypy/checker.py", line 973, in check_func_def
    self.accept(item.body)
  File "/Users/ilevkivskyi/src/mypy/mypy/checker.py", line 399, in accept
    stmt.accept(self)
  File "/Users/ilevkivskyi/src/mypy/mypy/nodes.py", line 1004, in accept
    return visitor.visit_block(self)
  File "/Users/ilevkivskyi/src/mypy/mypy/checker.py", line 1970, in visit_block
    self.accept(s)
  File "/Users/ilevkivskyi/src/mypy/mypy/checker.py", line 399, in accept
    stmt.accept(self)
  File "/Users/ilevkivskyi/src/mypy/mypy/nodes.py", line 1140, in accept
    return visitor.visit_return_stmt(self)
  File "/Users/ilevkivskyi/src/mypy/mypy/checker.py", line 3090, in visit_return_stmt
    self.check_return_stmt(s)
  File "/Users/ilevkivskyi/src/mypy/mypy/checker.py", line 3123, in check_return_stmt
    s.expr, return_type, allow_none_return=allow_none_func_call))
  File "/Users/ilevkivskyi/src/mypy/mypy/checkexpr.py", line 3723, in accept
    typ = node.accept(self)
  File "/Users/ilevkivskyi/src/mypy/mypy/nodes.py", line 1736, in accept
    return visitor.visit_op_expr(self)
  File "/Users/ilevkivskyi/src/mypy/mypy/checkexpr.py", line 2077, in visit_op_expr
    return self.check_boolean_op(e, e)
  File "/Users/ilevkivskyi/src/mypy/mypy/checkexpr.py", line 2703, in check_boolean_op
    right_map, left_map = self.chk.find_isinstance_check(e.left)
  File "/Users/ilevkivskyi/src/mypy/mypy/checker.py", line 3811, in find_isinstance_check
    if_map, else_map = self.find_isinstance_check_helper(node)
  File "/Users/ilevkivskyi/src/mypy/mypy/checker.py", line 3926, in find_isinstance_check_helper
    if is_overlapping_erased_types(item_type, collection_item_type):
  File "/Users/ilevkivskyi/src/mypy/mypy/meet.py", line 361, in is_overlapping_erased_types
    return is_overlapping_types(erase_type(left), erase_type(right),
  File "/Users/ilevkivskyi/src/mypy/mypy/erasetype.py", line 25, in erase_type
    return typ.accept(EraseTypeVisitor())
  File "/Users/ilevkivskyi/src/mypy/mypy/types.py", line 694, in accept
    return visitor.visit_erased_type(self)
  File "/Users/ilevkivskyi/src/mypy/mypy/erasetype.py", line 45, in visit_erased_type
    raise RuntimeError()
RuntimeError: 

This may be related to #8148, also note there is a weird pass here (it should probably be continue).

cc @Michael0x2a

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions