fix(expr): coerce_to_type 拓宽方向判定改传 builder.Pool,修正未定义实参 pool

coerce_to_type 作用域内并无 pool(其参数是 builder),L425 却把 pool 作为第 1 个实参传给 _zext_or_sext_val。此前该实参翻译失败会被静默按类型零值兜底,使传给 ExprGenOps.should_zext_widen 的池为空、变量注解符号性判定失效,从而在无符号拓宽时错走 sext(即该处注释所述的无符号扩展缺陷根因)。

改为传 builder.Pool(与同函数内 llvmlite.const_int64(builder.Pool, 0) 等一致,是共同值所处的池)。该未定义实参由本会话新增的「实参翻译失败即 fail-fast」规则暴露。
This commit is contained in:
TermiNexus committed 2026-09-14 15:48:09 +08:00
1 parent b918321f77
commit a46391bf42
1 file changed
+1 -1
+1 -1
View File
@@ -422,7 +422,7 @@ class ExprGenBase:
# trans 必须下传:_node_type_unsigned 对 Name/Subscript 形态需经
# trans.SymTab 查变量注解(uint16/sec:uint32 等)才能判定无符号,
# 否则返回未知 → 退回 sext(无符号扩展缺陷根因)。
if self._zext_or_sext_val(pool, val, node, trans) != 0:
if self._zext_or_sext_val(builder.Pool, val, node, trans) != 0:
return llvmlite.build_zext(builder, val, target_ty)
return llvmlite.build_sext(builder, val, target_ty)
# 窄化截断诊断(_Type.md 问题 8):宽→窄 trunc 静默丢位。