fix(mangle): 普通函数清除裸名导出集合

getcwd/chdir/system 等 os 包装函数不再进入 _export_funcs 裸名集合,按模块 SHA1 区分,消除重复符号。
This commit is contained in:
TermiNexus committed 2026-10-19 12:45:06 +08:00
1 parent a9f5d026c4
commit 80b7ce5bb1
1 file changed
+4 -2
+4 -2
View File
@@ -1206,8 +1206,9 @@ class FunctionHandle(BaseHandle):
# 同名用户函数应使用 SHA1 前缀,而非被误判为外部 C 函数返回裸名)
Gen._current_module_func_names.add(FuncName)
# 移除导入污染:用户函数未显式标记导出,但名称在 _export_funcs 中(来自导入的同名 C 库函数)
if not IsUserMarkedExport and FuncName in Gen._export_funcs:
if not IsUserMarkedExport:
Gen._export_funcs.discard(FuncName)
Gen._export_funcs.discard(Node.name)
MangledName: str = Node.name if _is_extern_node else Gen._mangle_func_name(FuncName)
# 自动取址模式:查表侧统一按**真实发射名**(func.name,即 MangledName)查
# (FuncGen._adjust_args)。签名阶段(_GetFunctionSignatureLlvm)只能按逻辑名
@@ -1729,8 +1730,9 @@ class FunctionHandle(BaseHandle):
# 注册当前模块定义的函数名,使 _mangle_func_name 跳过 _export_extern_funcs 检查
Gen._current_module_func_names.add(FuncName)
# 移除导入污染:用户函数未显式标记导出,但名称在 _export_funcs 中(来自导入的同名 C 库函数)
if not IsUserMarkedExport and FuncName in Gen._export_funcs:
if not IsUserMarkedExport:
Gen._export_funcs.discard(FuncName)
Gen._export_funcs.discard(Node.name)
MangledName = Gen._mangle_func_name(FuncName)
# 补登记:module.globals 已有同名函数(stub 声明 / 调用点先建)但未登记到
# Gen.functions 时,先登记再走下方判定 —— 否则 1750 分支裸建 ir.Function