Skip to content

Crash on nested unpacking of next() call #14250

@hamdanal

Description

@hamdanal

Crash Report

Mypy crashes with the following traceback. Small reproducer below. Tested with version 0.991 (compiled) and mypy master (not compiled).

Traceback

$ mypy --show-traceback t.py
t.py:3: 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: 1.0.0+dev.b8c03ab6809aab56928f3cd865edb44944a600a2
Traceback (most recent call last):
  File "/tmp/venv/bin/mypy", line 8, in <module>
    sys.exit(console_entry())
  File "/tmp/venv/lib/python3.10/site-packages/mypy/__main__.py", line 15, in console_entry
    main()
  File "/tmp/venv/lib/python3.10/site-packages/mypy/main.py", line 95, in main
    res, messages, blockers = run_build(sources, options, fscache, t0, stdout, stderr)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/main.py", line 174, in run_build
    res = build.build(sources, options, None, flush_errors, fscache, stdout, stderr)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/build.py", line 194, in build
    result = _build(
  File "/tmp/venv/lib/python3.10/site-packages/mypy/build.py", line 277, in _build
    graph = dispatch(sources, manager, stdout)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/build.py", line 2914, in dispatch
    process_graph(graph, manager)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/build.py", line 3311, in process_graph
    process_stale_scc(graph, scc, manager)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/build.py", line 3412, in process_stale_scc
    graph[id].type_check_first_pass()
  File "/tmp/venv/lib/python3.10/site-packages/mypy/build.py", line 2317, in type_check_first_pass
    self.type_checker().check_first_pass()
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checker.py", line 471, in check_first_pass
    self.accept(d)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checker.py", line 579, in accept
    stmt.accept(self)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/nodes.py", line 790, in accept
    return visitor.visit_func_def(self)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checker.py", line 956, in visit_func_def
    self._visit_func_def(defn)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checker.py", line 960, in _visit_func_def
    self.check_func_item(defn, name=defn.name)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checker.py", line 1032, in check_func_item
    self.check_func_def(defn, typ, name, allow_empty)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checker.py", line 1212, in check_func_def
    self.accept(item.body)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checker.py", line 579, in accept
    stmt.accept(self)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/nodes.py", line 1202, in accept
    return visitor.visit_block(self)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checker.py", line 2592, in visit_block
    self.accept(s)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checker.py", line 579, in accept
    stmt.accept(self)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/nodes.py", line 1289, in accept
    return visitor.visit_assignment_stmt(self)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checker.py", line 2640, in visit_assignment_stmt
    self.check_assignment(s.lvalues[-1], s.rvalue, s.type is None, s.new_syntax)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checker.py", line 2695, in check_assignment
    self.check_assignment_to_multiple_lvalues(
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checker.py", line 3349, in check_assignment_to_multiple_lvalues    self.check_multi_assignment(lvalues, rvalue, context, infer_lvalue_type)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checker.py", line 3396, in check_multi_assignment
    self.check_multi_assignment_from_tuple(
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checker.py", line 3511, in check_multi_assignment_from_tuple
    self.expr_checker.accept(rvalue, lvalue_type)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checkexpr.py", line 4768, in accept
    typ = node.accept(self)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/nodes.py", line 1871, in accept
    return visitor.visit_call_expr(self)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checkexpr.py", line 424, in visit_call_expr
    return self.visit_call_expr_inner(e, allow_none_return=allow_none_return)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checkexpr.py", line 544, in visit_call_expr_inner
    ret_type = self.check_call_expr_with_callee_type(
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checkexpr.py", line 1195, in check_call_expr_with_callee_type
    ret_type, callee_type = self.check_call(
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checkexpr.py", line 1289, in check_call
    return self.check_overload_call(
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checkexpr.py", line 2211, in check_overload_call
    inferred_result = self.infer_overload_return_type(
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checkexpr.py", line 2365, in infer_overload_return_type
    ret_type, infer_type = self.check_call(
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checkexpr.py", line 1278, in check_call
    return self.check_callable_call(
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checkexpr.py", line 1419, in check_callable_call
    callee = self.infer_function_type_arguments_using_context(callee, context)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/checkexpr.py", line 1648, in infer_function_type_arguments_using_context
    erased_ctx = replace_meta_vars(ctx, ErasedType())
  File "/tmp/venv/lib/python3.10/site-packages/mypy/erasetype.py", line 153, in replace_meta_vars
    return t.accept(TypeVarEraser(lambda id: id.is_meta_var(), target_type))
  File "/tmp/venv/lib/python3.10/site-packages/mypy/types.py", line 2205, in accept
    return visitor.visit_tuple_type(self)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/type_visitor.py", line 249, in visit_tuple_type
    self.translate_types(t.items),
  File "/tmp/venv/lib/python3.10/site-packages/mypy/type_visitor.py", line 276, in translate_types
    return [t.accept(self) for t in types]
  File "/tmp/venv/lib/python3.10/site-packages/mypy/type_visitor.py", line 276, in <listcomp>
    return [t.accept(self) for t in types]
  File "/tmp/venv/lib/python3.10/site-packages/mypy/types.py", line 2205, in accept
    return visitor.visit_tuple_type(self)
  File "/tmp/venv/lib/python3.10/site-packages/mypy/type_visitor.py", line 249, in visit_tuple_type
    self.translate_types(t.items),
  File "/tmp/venv/lib/python3.10/site-packages/mypy/type_visitor.py", line 276, in translate_types
    return [t.accept(self) for t in types]
  File "/tmp/venv/lib/python3.10/site-packages/mypy/type_visitor.py", line 276, in <listcomp>
    return [t.accept(self) for t in types]
  File "/tmp/venv/lib/python3.10/site-packages/mypy/types.py", line 2566, in accept
    assert isinstance(visitor, SyntheticTypeVisitor)
AssertionError:
t.py:3: : note: use --pdb to drop into pdb

To Reproduce

$ cat t.py
def mypy_crash() -> None:
    d: dict[int, tuple[str, int, str]] = {}
    k, (v1, *_) = next(iter(d.items()))  # <-- mypy crashes here

Your Environment

  • Mypy version used: mypy 1.0.0+dev.b8c03ab6809aab56928f3cd865edb44944a600a2 (compiled: no) (installed with pip install git+https://github.com/python/mypy#master)
  • Mypy command-line flags: mypy t.py
  • Mypy configuration options from mypy.ini (and other config files): None
  • Python version used: Python 3.10.6 (main, Nov 2 2022, 18:53:38) [GCC 11.3.0]
  • Operating system and version:
    • OS: Ubuntu 22.04.1 LTS on Windows 10 x86_64
    • Kernel: 5.15.74.2-microsoft-standard-WSL2
    • Also crashes on Debian Bullseye native (non WSL)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions