Skip to content

Crash in match statement with literals #13666

@Tinche

Description

@Tinche

Crash Report

Mypy crashes when run over a match statement.

Traceback

a05.py:10: 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.990+dev.7c14feedd2a6889d9eab8b0ac8dc8aab630bbed3
Traceback (most recent call last):
  File "/Users/tintvrtkovic/hr/shop-service/.venv/bin/mypy", line 8, in <module>
    sys.exit(console_entry())
  File "/Users/tintvrtkovic/hr/shop-service/.venv/lib/python3.10/site-packages/mypy/__main__.py", line 15, in console_entry
    main()
  File "/Users/tintvrtkovic/hr/shop-service/.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 "/Users/tintvrtkovic/hr/shop-service/.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 "/Users/tintvrtkovic/hr/shop-service/.venv/lib/python3.10/site-packages/mypy/build.py", line 188, in build
    result = _build(
  File "/Users/tintvrtkovic/hr/shop-service/.venv/lib/python3.10/site-packages/mypy/build.py", line 271, in _build
    graph = dispatch(sources, manager, stdout)
  File "/Users/tintvrtkovic/hr/shop-service/.venv/lib/python3.10/site-packages/mypy/build.py", line 2885, in dispatch
    process_graph(graph, manager)
  File "/Users/tintvrtkovic/hr/shop-service/.venv/lib/python3.10/site-packages/mypy/build.py", line 3269, in process_graph
    process_stale_scc(graph, scc, manager)
  File "/Users/tintvrtkovic/hr/shop-service/.venv/lib/python3.10/site-packages/mypy/build.py", line 3370, in process_stale_scc
    graph[id].type_check_first_pass()
  File "/Users/tintvrtkovic/hr/shop-service/.venv/lib/python3.10/site-packages/mypy/build.py", line 2302, in type_check_first_pass
    self.type_checker().check_first_pass()
  File "/Users/tintvrtkovic/hr/shop-service/.venv/lib/python3.10/site-packages/mypy/checker.py", line 462, in check_first_pass
    self.accept(d)
  File "/Users/tintvrtkovic/hr/shop-service/.venv/lib/python3.10/site-packages/mypy/checker.py", line 570, in accept
    stmt.accept(self)
  File "/Users/tintvrtkovic/hr/shop-service/.venv/lib/python3.10/site-packages/mypy/nodes.py", line 1559, in accept
    return visitor.visit_match_stmt(self)
  File "/Users/tintvrtkovic/hr/shop-service/.venv/lib/python3.10/site-packages/mypy/checker.py", line 4551, in visit_match_stmt
    inferred_types = self.infer_variable_types_from_type_maps(type_maps)
  File "/Users/tintvrtkovic/hr/shop-service/.venv/lib/python3.10/site-packages/mypy/checker.py", line 4600, in infer_variable_types_from_type_maps
    assert isinstance(node, Var)
AssertionError:
a05.py:10: : note: use --pdb to drop into pdb

To Reproduce

A few code snippets for context (imports omitted for clarity).

This works:

x: Literal["test"]

match x:
    case "test":
        pass
    case _:
        assert_never(x)

This doesn't type-check (but should), but no crash:

x: tuple[Literal["test"]]


match x:
    case ("test",):
        pass
    case _:
        assert_never(x)

And finally, the crash:

def x() -> tuple[Literal["test"]]:
    ...


match x():
    case (x,) if x == "test":
        pass
    case _:
        assert_never(1)

Your Environment

  • Mypy version used: mypy 0.990+dev.7c14feedd2a6889d9eab8b0ac8dc8aab630bbed3 (compiled: no)
  • Mypy command-line flags: --show-traceback
  • Mypy configuration options from mypy.ini (and other config files):
  • Python version used: 3.10.5
  • Operating system and version: macOs

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions