Skip to content

Infinite recursion with recursive TypedDict #3685

Description

@JukkaL

Mypy crashes with RecursionError when I type check this program:

frommypy_extensionsimportTypedDictA=TypedDict('A', {'a': 'A'})
a: A

Output:

t2.py:3: error: Invalidtype"t2.A"Traceback (mostrecentcalllast):
File"/Users/jukka/src/mypy/scripts/mypy", line6, in<module>main(__file__)
File"/Users/jukka/src/mypy/mypy/main.py", line50, inmainres=type_check_only(sources, bin_dir, options)
File"/Users/jukka/src/mypy/mypy/main.py", line97, intype_check_onlyoptions=options)
File"/Users/jukka/src/mypy/mypy/build.py", line196, inbuildgraph=dispatch(sources, manager)
File"/Users/jukka/src/mypy/mypy/build.py", line1769, indispatchprocess_graph(graph, manager)
File"/Users/jukka/src/mypy/mypy/build.py", line2012, inprocess_graphprocess_stale_scc(graph, scc, manager)
File"/Users/jukka/src/mypy/mypy/build.py", line2107, inprocess_stale_sccgraph[id].semantic_analysis()
File"/Users/jukka/src/mypy/mypy/build.py", line1664, insemantic_analysisself.manager.semantic_analyzer.visit_file(self.tree, self.xpath, self.options, patches)
File"/Users/jukka/src/mypy/mypy/semanal.py", line295, invisit_fileself.accept(d)
File"/Users/jukka/src/mypy/mypy/semanal.py", line3636, inacceptnode.accept(self)
File"/Users/jukka/src/mypy/mypy/nodes.py", line859, inacceptreturnvisitor.visit_assignment_stmt(self)
File"/Users/jukka/src/mypy/mypy/semanal.py", line1567, invisit_assignment_stmts.type=self.anal_type(s.type, allow_tuple_literal=allow_tuple_literal)
File"/Users/jukka/src/mypy/mypy/semanal.py", line1555, inanal_typereturnt.accept(a)
File"/Users/jukka/src/mypy/mypy/types.py", line189, inacceptreturnvisitor.visit_unbound_type(self)
File"/Users/jukka/src/mypy/mypy/typeanal.py", line292, invisit_unbound_typereturntd.copy_modified(item_types=self.anal_array(list(td.items.values())),
File"/Users/jukka/src/mypy/mypy/typeanal.py", line520, inanal_arrayres.append(self.anal_type(t, nested))
File"/Users/jukka/src/mypy/mypy/typeanal.py", line527, inanal_typereturnt.accept(self)
File"/Users/jukka/src/mypy/mypy/types.py", line189, inacceptreturnvisitor.visit_unbound_type(self)
...
File"/Users/jukka/src/mypy/mypy/typeanal.py", line152, invisit_unbound_typesym=self.lookup(t.name, t)
File"/Users/jukka/src/mypy/mypy/semanal.py", line3436, inlookup_qualifiedreturnself.lookup(name, ctx)
RecursionError: maximumrecursiondepthexceeded

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions