Skip to content

Commit d239756

Browse files
committed
Fix final load in unreachable branches
1 parent b5dfda6 commit d239756

1 file changed

Lines changed: 9 additions & 3 deletions

File tree

mypyc/irbuild/expression.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
UnaryExpr,
5050
Var,
5151
)
52-
from mypy.types import Instance, ProperType, TupleType, TypeType, get_proper_type
52+
from mypy.types import AnyType, Instance, ProperType, TupleType, TypeOfAny, TypeType, get_proper_type
5353
from mypyc.common import MAX_SHORT_INT
5454
from mypyc.ir.class_ir import ClassIR
5555
from mypyc.ir.func_ir import FUNC_CLASSMETHOD, FUNC_STATICMETHOD
@@ -147,12 +147,15 @@ def transform_name_expr(builder: IRBuilder, expr: NameExpr) -> Value:
147147
return math_literal
148148

149149
if isinstance(expr.node, Var) and expr.node.is_final:
150+
typ = builder.types.get(expr) or expr.node.type
151+
if typ is None:
152+
typ = AnyType(TypeOfAny.special_form)
150153
value = builder.emit_load_final(
151154
expr.node,
152155
fullname,
153156
expr.name,
154157
builder.is_native_ref_expr(expr),
155-
builder.types[expr],
158+
typ,
156159
expr.line,
157160
)
158161
if value is not None:
@@ -208,8 +211,11 @@ def transform_member_expr(builder: IRBuilder, expr: MemberExpr) -> Value:
208211
final = builder.get_final_ref(expr)
209212
if final is not None:
210213
fullname, final_var, native = final
214+
typ = builder.types.get(expr) or final_var.type
215+
if typ is None:
216+
typ = AnyType(TypeOfAny.special_form)
211217
value = builder.emit_load_final(
212-
final_var, fullname, final_var.name, native, builder.types[expr], expr.line
218+
final_var, fullname, final_var.name, native, typ, expr.line
213219
)
214220
if value is not None:
215221
return value

0 commit comments

Comments
 (0)