From 015d5c38eafec16b6d5a7c9a4fca4591091dc346 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Thu, 20 Aug 2026 07:53:33 +0800 Subject: [PATCH] =?UTF-8?q?fix(global):=20external=20=E5=A3=B0=E6=98=8E?= =?UTF-8?q?=E5=8D=87=E7=BA=A7=E7=94=A8=20initializer=20=E5=88=A4=E7=A9=BA?= =?UTF-8?q?=EF=BC=88llvmlite.ir=20=E6=97=A0=20is=5Fdeclaration=20=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 上次修复用 getattr(g, 'is_declaration') 判断声明态,但该属性仅在 llvmlite.binding 层存在,ir.GlobalVariable 没有 -> 恒 False -> 升级不生效, _g_gen 依旧无定义。改用 initializer is None 判断(external 声明必无 initializer;已定义全局必有),验证 common + null initializer 可设。 --- lib/core/Handles/HandlesAssign.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/core/Handles/HandlesAssign.py b/lib/core/Handles/HandlesAssign.py index 6047f64..96953cc 100644 --- a/lib/core/Handles/HandlesAssign.py +++ b/lib/core/Handles/HandlesAssign.py @@ -1488,7 +1488,9 @@ class AssignHandle(BaseHandle): # 应升级为 common 定义(多模块同名合并为零值,对齐 None 语义), # 而非静默跳过。 existing_gv = Gen.module.globals.get(VarName) if VarName in Gen.module.globals else None - if isinstance(existing_gv, ir.GlobalVariable) and getattr(existing_gv, 'is_declaration', False): + # 注:llvmlite.ir.GlobalVariable 无 is_declaration 属性(binding 层才有), + # 声明/定义靠 initializer 区分:external 声明 initializer 恒为 None。 + if isinstance(existing_gv, ir.GlobalVariable) and getattr(existing_gv, 'initializer', None) is None: try: existing_gv.linkage = 'common' if Node.value is None or (isinstance(Node.value, ast.Constant) and Node.value.value is None):