Skip to content

Crash when type checking class with some of its methods imported from external files. #10488

Closed
@ccie18643

Description

@ccie18643

Crash Report

Internal error when running 0.812 and 0.820

Traceback

(python3.8) root@ubuntu-1:~/crash_investigation/PyTCP# mypy --show-traceback pytcp.py 
/root/crash_investigation/PyTCP/misc/ph.py:407: error: INTERNAL ERROR -- Please try using mypy master on Github:
https://mypy.readthedocs.io/en/stable/common_issues.html#using-a-development-mypy-build
Please report a bug at https://github.com/python/mypy/issues
version: 0.820+dev.8642b351cff94c471333256f9cd6867807384f01
Traceback (most recent call last):
  File "/root/python3.8/bin/mypy", line 8, in <module>
    sys.exit(console_entry())
  File "/root/python3.8/lib/python3.8/site-packages/mypy/__main__.py", line 11, in console_entry
    main(None, sys.stdout, sys.stderr)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/main.py", line 98, in main
    res = build.build(sources, options, None, flush_errors, fscache, stdout, stderr)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/build.py", line 179, in build
    result = _build(
  File "/root/python3.8/lib/python3.8/site-packages/mypy/build.py", line 253, in _build
    graph = dispatch(sources, manager, stdout)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/build.py", line 2688, in dispatch
    process_graph(graph, manager)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/build.py", line 3012, in process_graph
    process_stale_scc(graph, scc, manager)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/build.py", line 3110, in process_stale_scc
    graph[id].type_check_first_pass()
  File "/root/python3.8/lib/python3.8/site-packages/mypy/build.py", line 2164, in type_check_first_pass
    self.type_checker().check_first_pass()
  File "/root/python3.8/lib/python3.8/site-packages/mypy/checker.py", line 294, in check_first_pass
    self.accept(d)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/checker.py", line 401, in accept
    stmt.accept(self)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/nodes.py", line 950, in accept
    return visitor.visit_class_def(self)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/checker.py", line 1726, in visit_class_def
    self.accept(defn.defs)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/checker.py", line 401, in accept
    stmt.accept(self)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/nodes.py", line 1015, in accept
    return visitor.visit_block(self)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/checker.py", line 1975, in visit_block
    self.accept(s)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/checker.py", line 401, in accept
    stmt.accept(self)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/nodes.py", line 687, in accept
    return visitor.visit_func_def(self)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/checker.py", line 726, in visit_func_def
    self._visit_func_def(defn)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/checker.py", line 730, in _visit_func_def
    self.check_func_item(defn, name=defn.name)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/checker.py", line 792, in check_func_item
    self.check_func_def(defn, typ, name)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/checker.py", line 975, in check_func_def
    self.accept(item.body)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/checker.py", line 401, in accept
    stmt.accept(self)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/nodes.py", line 1015, in accept
    return visitor.visit_block(self)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/checker.py", line 1975, in visit_block
    self.accept(s)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/checker.py", line 401, in accept
    stmt.accept(self)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/nodes.py", line 1030, in accept
    return visitor.visit_expression_stmt(self)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/checker.py", line 3155, in visit_expression_stmt
    self.expr_checker.accept(s.expr, allow_none_return=True, always_allow_any=True)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/checkexpr.py", line 3905, in accept
    typ = self.visit_call_expr(node, allow_none_return=True)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/checkexpr.py", line 271, in visit_call_expr
    return self.visit_call_expr_inner(e, allow_none_return=allow_none_return)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/checkexpr.py", line 320, in visit_call_expr_inner
    callee_type = get_proper_type(self.accept(e.callee, type_context, always_allow_any=True))
  File "/root/python3.8/lib/python3.8/site-packages/mypy/checkexpr.py", line 3911, in accept
    typ = node.accept(self)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/nodes.py", line 1510, in accept
    return visitor.visit_member_expr(self)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/checkexpr.py", line 2037, in visit_member_expr
    result = self.analyze_ordinary_member_access(e, is_lvalue)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/checkexpr.py", line 2055, in analyze_ordinary_member_access
    member_type = analyze_member_access(
  File "/root/python3.8/lib/python3.8/site-packages/mypy/checkmember.py", line 126, in analyze_member_access
    result = _analyze_member_access(name, typ, mx, override_info)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/checkmember.py", line 143, in _analyze_member_access
    return analyze_instance_member_access(name, typ, mx, override_info)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/checkmember.py", line 219, in analyze_instance_member_access
    typ = map_instance_to_supertype(typ, method.info)
  File "/root/python3.8/lib/python3.8/site-packages/mypy/maptype.py", line 20, in map_instance_to_supertype
    if not superclass.type_vars:
  File "/root/python3.8/lib/python3.8/site-packages/mypy/nodes.py", line 2705, in __getattribute__
    raise AssertionError(object.__getattribute__(self, 'msg'))
AssertionError: FuncBase for non-methods lack info
/root/crash_investigation/PyTCP/misc/ph.py:407: : note: use --pdb to drop into pdb

To Reproduce

git clone https://github.com/ccie18643/PyTCP
cd PyTCP
git checkout PyTCP_2_2
sed -i 's/def _send_gratitous_arp(self, ip4_unicast):/def _send_gratitous_arp(self, ip4_unicast) -> None:/' misc/ph.py
mypy pytcp.py

Your Environment

  • Mypy version used: 0.812 and 0.820
  • Mypy command-line flags: none
  • Mypy configuration options from mypy.ini (and other config files): none
  • Python version used: 3.8.6
  • Operating system and version: Ubuntu 20.04

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions