Repository navigation
overwriting None from Tuple[AnyStr]'s only item causes PartialType-related crash #1587
Copy link
Copy link
Closed
Closed
Copy link
Labels
Description
import os.path
x = None
if 0:
_, x = os.path.split("blah")results in:
Traceback (most recent call last):
File "/usr/local/bin/mypy", line 6, in <module>
main(__file__)
File "/usr/local/lib/python3.5/site-packages/mypy/main.py", line 54, in main
res = type_check_only(sources, bin_dir, options)
File "/usr/local/lib/python3.5/site-packages/mypy/main.py", line 102, in type_check_only
python_path=options.python_path)
File "/usr/local/lib/python3.5/site-packages/mypy/build.py", line 209, in build
dispatch(sources, manager)
File "/usr/local/lib/python3.5/site-packages/mypy/build.py", line 1325, in dispatch
process_graph(graph, manager)
File "/usr/local/lib/python3.5/site-packages/mypy/build.py", line 1456, in process_graph
process_stale_scc(graph, scc)
File "/usr/local/lib/python3.5/site-packages/mypy/build.py", line 1486, in process_stale_scc
graph[id].type_check()
File "/usr/local/lib/python3.5/site-packages/mypy/build.py", line 1305, in type_check
manager.type_checker.visit_file(self.tree, self.xpath)
File "/usr/local/lib/python3.5/site-packages/mypy/checker.py", line 424, in visit_file
self.accept(d)
File "/usr/local/lib/python3.5/site-packages/mypy/checker.py", line 465, in accept
typ = node.accept(self)
File "/usr/local/lib/python3.5/site-packages/mypy/nodes.py", line 862, in accept
return visitor.visit_if_stmt(self)
File "/usr/local/lib/python3.5/site-packages/mypy/checker.py", line 1661, in visit_if_stmt
self.accept(b)
File "/usr/local/lib/python3.5/site-packages/mypy/checker.py", line 465, in accept
typ = node.accept(self)
File "/usr/local/lib/python3.5/site-packages/mypy/nodes.py", line 715, in accept
return visitor.visit_block(self)
File "/usr/local/lib/python3.5/site-packages/mypy/checker.py", line 1149, in visit_block
self.accept(s)
File "/usr/local/lib/python3.5/site-packages/mypy/checker.py", line 465, in accept
typ = node.accept(self)
File "/usr/local/lib/python3.5/site-packages/mypy/nodes.py", line 753, in accept
return visitor.visit_assignment_stmt(self)
File "/usr/local/lib/python3.5/site-packages/mypy/checker.py", line 1158, in visit_assignment_stmt
self.check_assignment(s.lvalues[-1], s.rvalue, s.type is None)
File "/usr/local/lib/python3.5/site-packages/mypy/checker.py", line 1175, in check_assignment
infer_lvalue_type)
File "/usr/local/lib/python3.5/site-packages/mypy/checker.py", line 1244, in check_assignment_to_multiple_lvalues
self.check_multi_assignment(lvalues, rvalue, context, infer_lvalue_type)
File "/usr/local/lib/python3.5/site-packages/mypy/checker.py", line 1277, in check_multi_assignment
context, undefined_rvalue, infer_lvalue_type)
File "/usr/local/lib/python3.5/site-packages/mypy/checker.py", line 1297, in check_multi_assignment_from_tuple
rvalue_type = cast(TupleType, self.accept(rvalue, lvalue_type))
File "/usr/local/lib/python3.5/site-packages/mypy/checker.py", line 465, in accept
typ = node.accept(self)
File "/usr/local/lib/python3.5/site-packages/mypy/nodes.py", line 1185, in accept
return visitor.visit_call_expr(self)
File "/usr/local/lib/python3.5/site-packages/mypy/checker.py", line 1997, in visit_call_expr
return self.expr_checker.visit_call_expr(e)
File "/usr/local/lib/python3.5/site-packages/mypy/checkexpr.py", line 141, in visit_call_expr
return self.check_call_expr_with_callee_type(callee_type, e)
File "/usr/local/lib/python3.5/site-packages/mypy/checkexpr.py", line 192, in check_call_expr_with_callee_type
e.arg_names, callable_node=e.callee)[0]
File "/usr/local/lib/python3.5/site-packages/mypy/checkexpr.py", line 230, in check_call
callee, context)
File "/usr/local/lib/python3.5/site-packages/mypy/checkexpr.py", line 370, in infer_function_type_arguments_using_context
args = infer_type_arguments(callable.type_var_ids(), ret_type, erased_ctx)
File "/usr/local/lib/python3.5/site-packages/mypy/infer.py", line 43, in infer_type_arguments
return solve_constraints(type_var_ids, constraints)
File "/usr/local/lib/python3.5/site-packages/mypy/solve.py", line 50, in solve_constraints
top = meet_types(top, c.target)
File "/usr/local/lib/python3.5/site-packages/mypy/meet.py", line 22, in meet_types
return t.accept(TypeMeetVisitor(s))
File "/usr/local/lib/python3.5/site-packages/mypy/types.py", line 763, in accept
return visitor.visit_partial_type(self)
File "/usr/local/lib/python3.5/site-packages/mypy/meet.py", line 208, in visit_partial_type
assert False, 'Internal error'
AssertionError: Internal error
*** INTERNAL ERROR ***
test.py:5: error: Internal error -- please report a bug at https://github.com/python/mypy/issues
NOTE: you can use "mypy --pdb ..." to drop into the debugger when this happens.
We might want to fix this before releasing.
Activity
ddfisher commentedon May 27, 2016
Here's a simpler repro which produces a similar error:
gvanrossum commentedon May 27, 2016
euresti commentedon Jun 2, 2016
I can hit this using mkstemp with an overload that returns AnyStr. It only happens if the variable is defined as None beforehand and not annotated.
gvanrossum commentedon Oct 10, 2016
Simpler repro (similar to #1587 (comment) but without the confusing "output-only type var"):
[-]simple construct causes PartialType-related crash[/-][+]overwriting None from Tuple[AnyStr]'s only item causes PartialType-related crash[/+]Fix crash when assigning to partial type (#2772)