Skip to content

A class definition nested in *anything* crashes mypyc with KeyError #864

Closed
python/mypy
#18460
@ichard26

Description

@ichard26
from typing import Type

def outer() -> Type:
    class Inner:
        pass

    return Inner

print(outer())

Under CPython:

ichard26@acer-ubuntu:~/programming/oss/black$ python test.py
<class '__main__.outer.<locals>.Inner'>

With mypyc:

(black) ichard26@acer-ubuntu:~/programming/oss/black$ mypyc test.py
Traceback (most recent call last):
  File "mypyc/irbuild/builder.py", line 169, in accept
  File "mypy/nodes.py", line 950, in accept
  File "mypyc/irbuild/visitor.py", line 104, in visit_class_def
  File "mypyc/irbuild/classdef.py", line 44, in transform_class_def
test.py:4: KeyError: <TypeInfo test.Inner@4>

(black) ichard26@acer-ubuntu:~/programming/oss/black$ pip freeze | grep -P "(mypy)|(typing)"
[snipped]
mypy==0.812
mypy-extensions==0.4.3
typing-extensions==3.10.0.0
[snipped]

With mypyc on main:

(env2) ichard26@acer-ubuntu:~/programming/oss/black$ mypyc test.py
Traceback (most recent call last):
  File "build/setup.py", line 5, in <module>
    ext_modules=mypycify(['test.py'], opt_level="3"),
  File "/home/ichard26/programming/oss/black/env2/lib/python3.8/site-packages/mypyc/build.py", line 487, in mypycify
    groups, group_cfilenames = mypyc_build(
  File "/home/ichard26/programming/oss/black/env2/lib/python3.8/site-packages/mypyc/build.py", line 400, in mypyc_build
    group_cfiles, ops_text = generate_c(all_sources, options, groups, fscache,
  File "/home/ichard26/programming/oss/black/env2/lib/python3.8/site-packages/mypyc/build.py", line 200, in generate_c
    modules, ctext = emitmodule.compile_modules_to_c(
  File "/home/ichard26/programming/oss/black/env2/lib/python3.8/site-packages/mypyc/codegen/emitmodule.py", line 410, in compile_modules_to_c
    modules = compile_modules_to_ir(result, mapper, compiler_options, errors)
  File "/home/ichard26/programming/oss/black/env2/lib/python3.8/site-packages/mypyc/codegen/emitmodule.py", line 258, in compile_modules_to_ir
    scc_ir = compile_scc_to_ir(trees, result, mapper, compiler_options, errors)
  File "/home/ichard26/programming/oss/black/env2/lib/python3.8/site-packages/mypyc/codegen/emitmodule.py", line 209, in compile_scc_to_ir
    modules = build_ir(
  File "/opt/python3.8.5/lib/python3.8/contextlib.py", line 75, in inner
    return func(*args, **kwds)
  File "/home/ichard26/programming/oss/black/env2/lib/python3.8/site-packages/mypyc/irbuild/main.py", line 80, in build_ir
    transform_mypy_file(builder, module)
  File "/home/ichard26/programming/oss/black/env2/lib/python3.8/site-packages/mypyc/irbuild/main.py", line 123, in transform_mypy_file
    builder.accept(node)
  File "/home/ichard26/programming/oss/black/env2/lib/python3.8/site-packages/mypyc/irbuild/builder.py", line 169, in accept
    node.accept(self.visitor)
  File "/home/ichard26/programming/oss/black/env2/lib/python3.8/site-packages/mypy/nodes.py", line 687, in accept
    return visitor.visit_func_def(self)
  File "/home/ichard26/programming/oss/black/env2/lib/python3.8/site-packages/mypyc/irbuild/visitor.py", line 116, in visit_func_def
    transform_func_def(self.builder, fdef)
  File "/home/ichard26/programming/oss/black/env2/lib/python3.8/site-packages/mypyc/irbuild/function.py", line 59, in transform_func_def
    func_ir, func_reg = gen_func_item(builder, fdef, fdef.name, builder.mapper.fdef_to_sig(fdef))
  File "/home/ichard26/programming/oss/black/env2/lib/python3.8/site-packages/mypyc/irbuild/function.py", line 281, in gen_func_item
    builder.accept(fitem.body)
  File "/home/ichard26/programming/oss/black/env2/lib/python3.8/site-packages/mypyc/irbuild/builder.py", line 169, in accept
    node.accept(self.visitor)
  File "/home/ichard26/programming/oss/black/env2/lib/python3.8/site-packages/mypy/nodes.py", line 1015, in accept
    return visitor.visit_block(self)
  File "/home/ichard26/programming/oss/black/env2/lib/python3.8/site-packages/mypyc/irbuild/visitor.py", line 125, in visit_block
    transform_block(self.builder, block)
  File "/home/ichard26/programming/oss/black/env2/lib/python3.8/site-packages/mypyc/irbuild/statement.py", line 46, in transform_block
    builder.accept(stmt)
  File "/home/ichard26/programming/oss/black/env2/lib/python3.8/site-packages/mypyc/irbuild/builder.py", line 169, in accept
    node.accept(self.visitor)
  File "/home/ichard26/programming/oss/black/env2/lib/python3.8/site-packages/mypy/nodes.py", line 950, in accept
    return visitor.visit_class_def(self)
  File "/home/ichard26/programming/oss/black/env2/lib/python3.8/site-packages/mypyc/irbuild/visitor.py", line 104, in visit_class_def
    transform_class_def(self.builder, cdef)
  File "/home/ichard26/programming/oss/black/env2/lib/python3.8/site-packages/mypyc/irbuild/classdef.py", line 45, in transform_class_def
    ir = builder.mapper.type_to_ir[cdef.info]
test.py:4: KeyError: <TypeInfo test.Inner@4>

(env2) ichard26@acer-ubuntu:~/programming/oss/black$ pip freeze
mypy @ git+https://github.com/python/mypy@4642a31bdd437edc2ebe788cc6deb3214f06d997
mypy-extensions==0.4.3
toml==0.10.2
typing-extensions==3.10.0.0

Minified from psf/black. Also, thanks for the great tool and work! While it is sometimes painful working with mypyc getting Black (finally) compiled, the speedups are encouraging and make me happy :)

Metadata

Metadata

Assignees

No one assigned

    Labels

    crashFailing compile-time asserts, unhandled exceptions, or generated C code that's blowing up.priority-0-highpython compatMypyc doesn't match CPython or documented semantics.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions