diff --git a/mypy/checker.py b/mypy/checker.py index 96e41a5e1786..a65969b97568 100644 --- a/mypy/checker.py +++ b/mypy/checker.py @@ -3181,12 +3181,10 @@ def is_noop_for_reachability(self, s: Statement) -> bool: return True elif isinstance(s, ReturnStmt) and is_literal_not_implemented(s.expr): return True - elif isinstance(s, (RaiseStmt, PassStmt)): + elif isinstance(s, RaiseStmt): return True elif isinstance(s, ExpressionStmt): - if isinstance(s.expr, EllipsisExpr): - return True - elif isinstance(s.expr, CallExpr): + if isinstance(s.expr, CallExpr): with self.expr_checker.msg.filter_errors(filter_revealed_type=True): typ = get_proper_type( self.expr_checker.accept( diff --git a/test-data/unit/check-unreachable-code.test b/test-data/unit/check-unreachable-code.test index 98c676dbf42b..e4d67055fa00 100644 --- a/test-data/unit/check-unreachable-code.test +++ b/test-data/unit/check-unreachable-code.test @@ -1637,7 +1637,17 @@ class C: return C() else: return NotImplemented +[builtins fixtures/isinstance.pyi] + +[case testPassAndEllipsisUnreachable] +# flags: --warn-unreachable +def f() -> None: + return + pass # E: Statement is unreachable +def g() -> None: + return + ... # E: Statement is unreachable [builtins fixtures/isinstance.pyi] [case testUnreachableStatementPrettyHighlighting]