From 6d627d67cf3f70f805996e3cfc2e3f441d3f0fc7 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Wed, 19 Aug 2026 04:58:12 +0800 Subject: [PATCH] =?UTF-8?q?fix(gen):=20fatal=5Ferror=20=E5=90=8E=E8=A1=A5?= =?UTF-8?q?=20return=20=E6=A0=B7=E6=9D=BF=EF=BC=8C=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E8=AE=BF=E9=97=AE/=E5=86=99=E5=85=A5?= =?UTF-8?q?=E6=8E=89=E5=87=BA=E6=9C=AB=E5=B0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit translate_attribute 与 get_attribute_ptr 的 match 末 arm(case _)调 fatal_error 后无 return None → 块未 terminated → 该 arm 被 match 收尾 误判掉出 → br end_bb → merge 可达 → 方法收尾 fail-fast '流程掉出末尾' (返回类型 Value*)。补显式 return None(块设计约定:fatal_error 后也 必须保证块 terminated)。 --- App/lib/core/Gen/ExprGenAttr.vp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/App/lib/core/Gen/ExprGenAttr.vp b/App/lib/core/Gen/ExprGenAttr.vp index a95f645..b5b025b 100644 --- a/App/lib/core/Gen/ExprGenAttr.vp +++ b/App/lib/core/Gen/ExprGenAttr.vp @@ -874,6 +874,9 @@ class ExprGenAttr(ExprGenBase.ExprGenBase): at, f"属性访问失败: .{attr_nm_ap} (base=非指针类型,无法做属性访问 sha1={sha1_ap}:{ln_ap})", "TypeError") + # fatal_error 后补显式 return 样板:match 末 arm 块必须 terminated, + # 否则掉出末尾被函数收尾 fail-fast 误判(块设计约定) + return None # ============================================================ # 获取属性访问的字段指针(不加载值,用于赋值) # 对于 Name 类型的 obj,直接使用 alloca 指针(不 load 结构体) @@ -1143,4 +1146,6 @@ class ExprGenAttr(ExprGenBase.ExprGenBase): HandlesType.fatal_error( at, f"属性写入失败: .{attr_nm_gp} (base=非指针类型,无法做属性写入 sha1={sha1_gp}:{ln_gp})", - "TypeError") \ No newline at end of file + "TypeError") + # fatal_error 后补显式 return 样板:match 末 arm 块必须 terminated + return None \ No newline at end of file