Skip to content

New "Must not defer during final iteration" crash #14565

Closed

Description

@hauntsaninja

Crash Report

It looks like mypy has started crashing on one of the mypy_primer projects, https://github.com/FasterSpeeding/Tanjun (after the latest commit to that project). I noticed this in #14238 (comment)

mypy 0.991 does not crash on the project. I've bisected the crash to #14159 cc @ilevkivskyi

The crash is caused by the latest commit to the project: Cursed-Solutions/Tanjun@942b8b4

Traceback

...
	  File "/private/tmp/mypy_primer/bisect_mypy/mypy/mypy/build.py", line 3403, in process_stale_scc
	    mypy.semanal_main.semantic_analysis_for_scc(graph, scc, manager.errors)
	  File "/private/tmp/mypy_primer/bisect_mypy/mypy/mypy/semanal_main.py", line 85, in semantic_analysis_for_scc
	    process_functions(graph, scc, patches)
	  File "/private/tmp/mypy_primer/bisect_mypy/mypy/mypy/semanal_main.py", line 243, in process_functions
	    process_top_level_function(
	  File "/private/tmp/mypy_primer/bisect_mypy/mypy/mypy/semanal_main.py", line 282, in process_top_level_function
	    deferred, incomplete, progress = semantic_analyze_target(
	  File "/private/tmp/mypy_primer/bisect_mypy/mypy/mypy/semanal_main.py", line 339, in semantic_analyze_target
	    analyzer.refresh_partial(
	  File "/private/tmp/mypy_primer/bisect_mypy/mypy/mypy/semanal.py", line 602, in refresh_partial
	    self.accept(node)
	  File "/private/tmp/mypy_primer/bisect_mypy/mypy/mypy/semanal.py", line 6175, in accept
	    node.accept(self)
	  File "/private/tmp/mypy_primer/bisect_mypy/mypy/mypy/nodes.py", line 790, in accept
	    return visitor.visit_func_def(self)
	  File "/private/tmp/mypy_primer/bisect_mypy/mypy/mypy/semanal.py", line 829, in visit_func_def
	    self.analyze_func_def(defn)
	  File "/private/tmp/mypy_primer/bisect_mypy/mypy/mypy/semanal.py", line 864, in analyze_func_def
	    self.defer(defn)
	  File "/private/tmp/mypy_primer/bisect_mypy/mypy/mypy/semanal.py", line 5852, in defer
	    assert not self.final_iteration, "Must not defer during final iteration"
	AssertionError: Must not defer during final iteration

To Reproduce

git clone https://github.com/FasterSpeeding/Tanjun
cd Tanjun
python -m venv env
env/bin/python -m pip install hikari alluka

mypy tanjun --show-traceback --python-executable=env/bin/python

Activity

  1. hauntsaninja commented on Jan 31, 2023

    @hauntsaninja
    CollaboratorAuthor

    Okay, here's a minimised repro:

    from typing import Any, Callable, Coroutine, Generic, Optional, TypeVar, Union
    from typing_extensions import Concatenate, ParamSpec, Self
    
    _P = ParamSpec("_P")
    _T = TypeVar("_T")
    _ContextT_contra = TypeVar("_ContextT_contra", bound="Context", contravariant=True)
    _CoroT = Coroutine[Any, Any, _T]
    
    _MaybeAwaitable = Callable[_P, Union[_CoroT[_T], _T]]
    
    _ErrorHookSig = _MaybeAwaitable[Concatenate[_ContextT_contra, Exception, _P], Optional[bool]]
    ErrorHookSig = _ErrorHookSig[_ContextT_contra, ...]
    
    class Hooks(Generic[_ContextT_contra]):
        def add_on_error(self, callback: ErrorHookSig[_ContextT_contra], /) -> Self:
            raise NotImplementedError
    
    class Context: ...
    
  2. hauntsaninja commented on Jan 31, 2023

    @hauntsaninja
    CollaboratorAuthor

    And slightly simpler:

    from typing import Callable, TypeVar
    from typing_extensions import Concatenate, ParamSpec
    
    _P = ParamSpec("_P")
    _ContextT = TypeVar("_ContextT", bound="Context")
    
    _MaybeAwaitable = Callable[_P, bool]
    _ErrorHookSig = _MaybeAwaitable[Concatenate[_ContextT, _P], bool]
    
    def add_on_error(callback: _ErrorHookSig[_ContextT, ...]) -> None:
        raise NotImplementedError
    
    class Context: ...
  3. added a commit that references this issue on Feb 1, 2023
    c375009
  4. added a commit that references this issue on Feb 2, 2023
    7242f4b
  5. added a commit that references this issue on Feb 2, 2023
    319980b
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions