fix(tpv): 修 VKernel 暴露的 codegen 缺陷(浮点 CDefine/__sizeof__ packed/CONST_STR/alloca/无符号/ABI)

- 浮点 t.CDefine 初值序列化与源恢复(gfx PI 编成 0.0)

- __sizeof__ 按 packed 计算(cpu _tss memset 越界写 4B)

- 数组初始化器支持 CONST_STR 单字符;模块级别名不再产出 global i32 0 假全局

- 临时缓冲/构造临时量 alloca 提升至入口块(B6 未覆盖路径)

- 无符号判定补 CSizeT/小写别名/结构体字段 + udiv/urem + range 位宽与符号 + zext 扩展

- 跨模块 declare 形参按 vpi 定义侧收敛(修 _vpi_method_param_annot 拒绝 cls_name=None 导致 coerce 恒失效)
This commit is contained in:
TermiNexus committed 2026-09-11 14:26:54 +08:00
1 parent bd46b47b22
commit e20a6f3d11
23 files changed
+655 -101

No files matched your search

+4
View File
@@ -692,6 +692,10 @@ class CallGenBase:
# {sha1}.{cls}.{method} 查 vpi 参数注解缓存取定义侧类型:仅当实参与
# 定义都是整数且定义更宽时采用定义宽度(指针/联合保持实参类型,避免
# 字符串路径把 list*/Struct* 降级为 i8*)。
# 注:反方向(定义侧更窄,如 su8250.putchar 定义 (i16,i8) 而字面量
# 1016=i32)由调用点 CallGenLib._coerce_args_to_def_params 先把实参
# 窄化到定义宽度,本处依 param_head 建 declare 即已对齐(此块做补强,
# 对已窄化的实参不再触发)。
sha1_d: str = None
cls_d: str = None
meth_d: str = None