From 3d638927d5ffa2b05d9c1fa697c7b4f5d244b513 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Mon, 12 Oct 2026 19:22:36 +0800 Subject: [PATCH] =?UTF-8?q?fix(gen):=20=E7=A7=BB=E4=BD=8D=E7=9A=84?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E4=BD=8D=E5=AE=BD=E4=B8=8D=E8=AE=A1=E5=85=A5?= =?UTF-8?q?=E8=AE=A1=E6=95=B0=E5=AE=BD=E5=BA=A6=EF=BC=8C=E4=BF=AE=20ushort?= =?UTF-8?q?=20=E8=A1=A8=E8=BE=BE=E5=BC=8F=E8=A2=AB=E6=8A=AC=E6=88=90=2032?= =?UTF-8?q?=20=E4=BD=8D=E5=90=8E=E8=B5=8B=E5=9B=9E=20ushort=20=E8=AF=AF?= =?UTF-8?q?=E6=8A=A5=E7=AA=84=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App/lib/core/Gen/Expr/ExprGenOps.vp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/App/lib/core/Gen/Expr/ExprGenOps.vp b/App/lib/core/Gen/Expr/ExprGenOps.vp index 5ef9856..eaf5315 100644 --- a/App/lib/core/Gen/Expr/ExprGenOps.vp +++ b/App/lib/core/Gen/Expr/ExprGenOps.vp @@ -1238,7 +1238,10 @@ novirtual class ExprGenOps(ExprGenBase.ExprGenBase): work_bits: int = 32 if tgt_bits != 0: work_bits = tgt_bits if lhs_bits > work_bits: work_bits = lhs_bits - if rhs_bits > work_bits: work_bits = rhs_bits + # 移位:**计数宽度不代表结果位宽**,不能计入工作位宽;否则 32 位计数字面量会把 + # `s << 1`(s: ushort)抬成 32 位,顺链把整条表达式抬成 32 位、赋回 ushort 时误报窄化。 + if op != ast.OpKind.LShift and op != ast.OpKind.RShift: + if rhs_bits > work_bits: work_bits = rhs_bits # 移位:C 语义只提升**左操作数**到工作位宽(计数的宽度不参与结果类型),避免 `uchar(x) << 8` # 之类因计数位宽不足而误报「移位数 >= 左操作数位宽」。