diff --git a/mypy/semanal.py b/mypy/semanal.py index 7f961687a8ae..0e7cdae42673 100644 --- a/mypy/semanal.py +++ b/mypy/semanal.py @@ -4516,10 +4516,9 @@ def analyze_lvalue( elif isinstance(lval, TupleExpr): self.analyze_tuple_or_list_lvalue(lval, explicit_type) elif isinstance(lval, StarExpr): - if nested: - self.analyze_lvalue(lval.expr, nested, explicit_type) - else: + if not nested: self.fail("Starred assignment target must be in a list or tuple", lval) + self.analyze_lvalue(lval.expr, nested, explicit_type) else: self.fail("Invalid assignment target", lval) diff --git a/test-data/unit/check-statements.test b/test-data/unit/check-statements.test index cb445cf4a1a2..f9156b4d1b8c 100644 --- a/test-data/unit/check-statements.test +++ b/test-data/unit/check-statements.test @@ -2104,6 +2104,12 @@ if int(): -- --------------- +[case testInvalidBareStarAssignmentTargetNoCrash] +# https://github.com/python/mypy/issues/20796 +# flags: --debug-serialize +*a = b # E: Starred assignment target must be in a list or tuple \ + # E: Name "b" is not defined + [case testAssignListToStarExpr] from typing import List bs: List[A]