From a46391bf426fc75391ac3ed4992368f645082035 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Mon, 14 Sep 2026 15:48:09 +0800 Subject: [PATCH] =?UTF-8?q?fix(expr):=20coerce=5Fto=5Ftype=20=E6=8B=93?= =?UTF-8?q?=E5=AE=BD=E6=96=B9=E5=90=91=E5=88=A4=E5=AE=9A=E6=94=B9=E4=BC=A0?= =?UTF-8?q?=20builder.Pool=EF=BC=8C=E4=BF=AE=E6=AD=A3=E6=9C=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E5=AE=9E=E5=8F=82=20pool?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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」规则暴露。 --- App/lib/core/Gen/Expr/ExprGenBase.vp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/App/lib/core/Gen/Expr/ExprGenBase.vp b/App/lib/core/Gen/Expr/ExprGenBase.vp index aa6187a..07e688c 100644 --- a/App/lib/core/Gen/Expr/ExprGenBase.vp +++ b/App/lib/core/Gen/Expr/ExprGenBase.vp @@ -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 静默丢位。