diff --git a/mypy/checker.py b/mypy/checker.py index b2c4f2263262..77616411735b 100644 --- a/mypy/checker.py +++ b/mypy/checker.py @@ -476,7 +476,12 @@ def check_first_pass(self) -> None: if self.binder.is_unreachable(): if not self.should_report_unreachable_issues(): break - if not self.is_noop_for_reachability(d): + if self.is_noop_for_reachability(d): + if not isinstance(d, ExpressionStmt) or not isinstance( + d.expr, CallExpr + ): + self.accept(d) + else: self.msg.unreachable_statement(d) break else: @@ -2948,7 +2953,10 @@ def visit_block(self, b: Block) -> None: if self.binder.is_unreachable(): if not self.should_report_unreachable_issues(): break - if not self.is_noop_for_reachability(s): + if self.is_noop_for_reachability(s): + if not isinstance(s, ExpressionStmt) or not isinstance(s.expr, CallExpr): + self.accept(s) + else: self.msg.unreachable_statement(s) break else: diff --git a/test-data/unit/check-unreachable-code.test b/test-data/unit/check-unreachable-code.test index e6818ab5c3c7..b5cfa9f77369 100644 --- a/test-data/unit/check-unreachable-code.test +++ b/test-data/unit/check-unreachable-code.test @@ -1505,6 +1505,14 @@ def f() -> Generator[None, None, None]: return None yield None +[case testErrorInNoopForReachabilityStatement] +# flags: --warn-unreachable +def double(x: int) -> int: + if not isinstance(x, int): + raise BaseException["Expected an integer"] # E: The type "Type[BaseException]" is not generic and not indexable + return x +[builtins fixtures/tuple.pyi] + [case testLambdaNoReturn] # flags: --warn-unreachable from typing import Callable, NoReturn