diff --git a/mypy/partially_defined.py b/mypy/partially_defined.py index af09493c9cae..9b8238eff83f 100644 --- a/mypy/partially_defined.py +++ b/mypy/partially_defined.py @@ -396,8 +396,8 @@ def visit_if_stmt(self, o: IfStmt) -> None: self.tracker.end_branch_statement() def visit_match_stmt(self, o: MatchStmt) -> None: - self.tracker.start_branch_statement() o.subject.accept(self) + self.tracker.start_branch_statement() for i in range(len(o.patterns)): pattern = o.patterns[i] pattern.accept(self) diff --git a/test-data/unit/check-python310.test b/test-data/unit/check-python310.test index 12fd2b43c80a..7a934348aaf2 100644 --- a/test-data/unit/check-python310.test +++ b/test-data/unit/check-python310.test @@ -1813,6 +1813,19 @@ def f1(x: int) -> int: [typing fixtures/typing-medium.pyi] +[case testUsedBeforeDefMatchWalrus] +# flags: --enable-error-code used-before-def +import typing + +def f0(x: int) -> None: + a = y # E: Cannot determine type of "y" # E: Name "y" is used before definition + match y := x: + case 1: + b = y + case 2: + c = y + d = y + [case testTypeAliasWithNewUnionSyntaxAndNoneLeftOperand] from typing import overload class C: