From 09d03f45257f72acfd0b0cc9df9d3bcbe95c4a1a Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Sat, 22 Aug 2026 04:08:43 +0800 Subject: [PATCH] =?UTF-8?q?fix(tpc):=20=E8=BF=94=E5=9B=9E=20fail-fast=20?= =?UTF-8?q?=E8=AF=AF=E6=8A=A5=E4=BF=AE=E5=A4=8D=E2=80=94=E2=80=94=E6=9C=AB?= =?UTF-8?q?=E5=8F=A5=E6=8E=A7=E5=88=B6=E6=B5=81=E6=8E=89=E5=87=BA=E6=9C=AB?= =?UTF-8?q?=E5=B0=BE=E4=B8=8D=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 检查未区分普通语句掉出与末句控制流(match/if)掉出:match 翻译后停在合成 after 块(未 terminated)是机械产物,所有 arm 已 terminated 属正常(fatal_error + return None 样板),被误判为掉出缺陷 - 修复:Node.body[-1] 是 If/Match/While/For/Try/With 时豁免 fail-fast(符合隐式返回规则:末句控制流 -> unreachable) - NegativeTest missing_return(末句 Assign)仍报错 --- lib/core/Handles/HandlesFunctions.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/core/Handles/HandlesFunctions.py b/lib/core/Handles/HandlesFunctions.py index 37f267d..2ac4f74 100644 --- a/lib/core/Handles/HandlesFunctions.py +++ b/lib/core/Handles/HandlesFunctions.py @@ -1841,7 +1841,14 @@ class FunctionHandle(BaseHandle): # → 立即报错,不静默 ret 0(用户隐式返回规则)。 # -> None / -> t.CVoid 视为 Void(掉出 ret void 合法);无注解 → C 风格 # 过程(ConstZero,保持现状);其余注解(int/str/...)掉出末尾报错。 - if Node.returns is not None: + # 例外:末句是控制流(If/Match/While/For/Try/With)→ 掉出末尾合法 + # (隐式返回规则:末句控制流 → unreachable)。match/if 等翻译后停在 + # 合成 after 块(未 terminated)是机械产物,所有 arm 已 terminated 属 + # 正常(如 fatal_error + return None 样板),不能误判为普通语句掉出。 + _last_stmt = Node.body[-1] if Node.body else None + _is_ctrl_tail: bool = isinstance(_last_stmt, ( + ast.If, ast.Match, ast.While, ast.For, ast.Try, ast.With)) + if Node.returns is not None and not _is_ctrl_tail: _ret_annot_void: bool = ( isinstance(Node.returns, ast.Constant) and Node.returns.value is None) or ( isinstance(Node.returns, ast.Attribute) and getattr(Node.returns, 'attr', '') == 'CVoid')