Skip to content

New --quick crash: "assert override is not None" #3355

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
gvanrossum opened this issue May 12, 2017 · 10 comments · Fixed by #3356
Closed

New --quick crash: "assert override is not None" #3355

gvanrossum opened this issue May 12, 2017 · 10 comments · Fixed by #3356

Comments

@gvanrossum
Copy link
Member

I'm seeing new crashes in quick mode in production. Note that these start with two legitimate mypy errors. On stderr:

dropbox/fastwalk_bridge.py:36: error: INTERNAL ERROR -- please report a bug at https://github.com/python/mypy/issues version: 0.510-dev-54f1df90e40db1f0f57814a193134fa9749a2527
dropbox/fastwalk_bridge.py:36: note: use --pdb to drop into pdb

On stdout:

build_number/__init__.py:31: error: Module 'build_number._frozen_version' has no attribute 'DROPBOXEXT_VERSION'
build_number/__init__.py:102: error: "DesktopClientBuildNumber" has no attribute "name"
Traceback (most recent call last):
  File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/__main__.py", line 5, in <module>
    main(None)
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/main.py", line 46, in main
    res = type_check_only(sources, bin_dir, options)
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/main.py", line 93, in type_check_only
    options=options)
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/build.py", line 188, in build
    graph = dispatch(sources, manager)
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/build.py", line 1595, in dispatch
    process_graph(graph, manager)
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/build.py", line 1838, in process_graph
    process_stale_scc(graph, scc, manager)
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/build.py", line 1931, in process_stale_scc
    graph[id].semantic_analysis()
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/build.py", line 1495, in semantic_analysis
    self.manager.semantic_analyzer.visit_file(self.tree, self.xpath, self.options)
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/semanal.py", line 257, in visit_file
    self.accept(d)
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/semanal.py", line 3288, in accept
    node.accept(self)
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/nodes.py", line 749, in accept
    return visitor.visit_class_def(self)
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/semanal.py", line 620, in visit_class_def
    defn.defs.accept(self)
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/nodes.py", line 810, in accept
    return visitor.visit_block(self)
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/semanal.py", line 1375, in visit_block
    self.accept(s)
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/semanal.py", line 3288, in accept
    node.accept(self)
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/nodes.py", line 631, in accept
    return visitor.visit_decorator(self)
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/semanal.py", line 2470, in visit_decorator
    dec.func.accept(self)
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/nodes.py", line 564, in accept
    return visitor.visit_func_def(self)
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/semanal.py", line 376, in visit_func_def
    self.analyze_function(defn)
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/semanal.py", line 550, in analyze_function
    defn.type = self.type_analyzer().visit_callable_type(defn.type, nested=False)
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/typeanal.py", line 343, in visit_callable_type
    ret_type=self.anal_type(t.ret_type, nested=nested),
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/typeanal.py", line 521, in anal_type
    return t.accept(self)
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/types.py", line 211, in accept
    return visitor.visit_unbound_type(self)
  File "/Users/---/src/desktop-client/.mypy/venv/lib/python3.6/site-packages/mypy/typeanal.py", line 210, in visit_unbound_type
    assert override is not None
AssertionError: 
@ilevkivskyi
Copy link
Member

This one seems easy, could you please check whether #3356 fixes this?

gvanrossum pushed a commit that referenced this issue May 12, 2017
Possible fix for #3355 
For deserialized node with cross_ref, if we can't find the cross_ref in quick mode, then we need to put something in there, see #3304. This PR does exactly the same for the case of a type alias node.
@gvanrossum
Copy link
Member Author

This crash is still occurring, so #3356 did not fix it.

@gvanrossum gvanrossum reopened this May 26, 2017
@ilevkivskyi
Copy link
Member

This crash is still occurring, so #3356 did not fix it.

This looks more mysterious now. Are there any hints about how to reproduce this?

@ilevkivskyi ilevkivskyi self-assigned this May 30, 2017
@gvanrossum
Copy link
Member Author

Sadly it's very shy.

@gvanrossum
Copy link
Member Author

This is recurring again. I really need to figure out what's going on.

@ilevkivskyi
Copy link
Member

ilevkivskyi commented Jul 19, 2017

If this is a big problem, I have a fix that I am not 100% happy with, but it will certainly work. The idea is very simple: replace the assert in --quick mode with a dummy Instance that will trigger errors down the way citing <stale cache: reconsider running mypy without --quick> (like we did for other situations in fixup.py).

@ilevkivskyi
Copy link
Member

Actually, few more tracebacks will be very helpful to find a less hacky solution. Or are they all identical?

@gvanrossum
Copy link
Member Author

I'll mail you a few off-list.

@ilevkivskyi
Copy link
Member

ilevkivskyi commented Jul 19, 2017

OK, thanks for tracebacks, I now have a repro.
It involves double import of an alias, for example:

[file c.py]
from typing import List
Alias = List[int]

[file d.py]
from c import Alias
x: Alias

[file e.py]
from d import Alias # it is important to import from 'd', not 'c'
x: Alias

Now all in quick mode from cold cache:

  • check e.py
  • modify c.py to contain Alias = int and check c.py
  • do any modification to e.py (just to change the hash) and check it

I will try to make a PR now.

@ilevkivskyi
Copy link
Member

Actually my initial solution in #3524 (comment) should work (I was not sure about this at that time and didn't have a test, so I decided to postpone this to a separate PR). I will make a PR soon, just need to write the repro in a test.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants