Files
TransPyC/TODO.md
T
TermiNexus 485ab0d329 docs(todo): 记录 list[ptr].append 运行期读零页崩溃待查
编译问题已解(2f0d52e 系列),但 list[ptr].append 运行期崩溃(读零页
0xf8/0x128/0x148)未根修:构造插桩确认 pool 有效 elem=8,差异在
item:t.CPtr 参数/lem_ptr[0]=item store 生成。当前 BuildPipeline 用
list[str] 绕开(TPV dc5bb21)。
2026-08-19 23:35:12 +08:00

71 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TODO
## BUG:list[对象类型] 元素 store/load 不一致(llc 并行误报失败根因)
**状态**:**已根修(TPC `_HandleSizeofLlvm` 联合类型 sizeof)**,句柄数组保留(`0810f9f`)
### 现象
- TPV 编译器(tpv.exe)Phase B `run_llc_parallel` 并行跑 llc 时,`list[vthreading.Thread]` 存线程对象
- `join(0)` 正常等待,`join(1)` 立即返回 alive=0,失败槽 Result=-1 误报(ClassArrayTest 反复失败)
### 根因(插桩 [LLC-DBG2] 证实)
1. **`list[对象]` 的 elem_size=0(真正根因,2026-08-19 定位)**:
- `_list.vp.__init__` 的 `T.__sizeof__()` 在特化后 T 被还原为 `X | t.CPtr`(BinOp 联合)
- TPC `_HandleSizeofLlvm`(HandlesExprCall.py)对 BinOp 节点落到 else 返回 **0** → `__elem_size__=0`
- 后果:append 每次都写 `data + count*0 = data[0]`(同槽覆盖),get(0)==get(1) 同一槽 → 线程句柄错乱
- **修复**:`_HandleSizeofLlvm` 对含 t.CPtr 的联合类型返回 8(指针大小)
2. 叠加效应:`j=0` 的 `close()` 把对象 handle 置 NULL → `j=1` 的 join 用 NULL 句柄 → WAIT_FAILED
### 相关提交链
`42aa90c`(c.Deref 增强) → `4bd254a`(槽间距) → `3f3e3d5`(STARTUPINFOA 清零) → `645e8e0`(指针元素) → `88778dc`(定位插桩) → `0810f9f`(句柄数组绕开)
---
## BUG:list[t.CPtr] 特化 "Undefined method 'append'"
**状态**:**已根修(TPC)**,待验证
### 现象
- TPC 编译 `handles: list[t.CPtr] = list[t.CPtr](_mbuddy)` → `Exception: Undefined method 'append' in class 'list[CPtr]' (no function declaration found for 'list[CPtr].append')`
### 根因(TPC 泛型特化名/模板替换不一致)
1. **`_resolve_generic_slice_type` 对 `t.CPtr` 返回 raw_name='CPtr'**(裸名)→ `_specialize_generic_class` 的 `type_map['T']='CPtr'` → 模板 `item: T` 替换为 `item: CPtr` → **CPtr 不在顶层作用域 → append 方法声明注册失败**
2. **mangled 名不一致**:特化端 spec_name=`list[ptr]`(type_arg 规范化 'ptr'),查找端(`FindStructNameInAnnotation`)/声明端(`DeclarationGenerator`)生成 `list[CPtr]` / `list[i8*]` → 找不到
### 修复(TPC,2026-08-19)
- `HandlesExprCall._resolve_generic_slice_type`:t.CPtr 的 raw_name 保留带前缀 `'t.CPtr'`(可解析),去掉 'CPtr' 裸名特殊处理
- `HandlesClassDef._specialize_generic_class`:cptr_params/class_type_names 判定改 `tn_bare`(`'t.CPtr'`→`'CPtr'` 内建,不当类类型)
- `SymbolUtils.FindStructNameInAnnotation`:`CPtr`/`t.CPtr` → `'ptr'`(查找端类名与特化端统一)
- `DeclarationGenerator`:`CPtr` → `'ptr'`(声明端 mangled 统一,避免 `list[i8*]` vs `list[ptr]`)
### 待办
- [x] 重建 TPV 验证:TPC 编译 BuildPipeline.vp 通过(编译问题已解)
- [ ] **list[ptr].append 运行崩溃(见下节)**
- [ ] **TPV 侧(tpv.exe 编译其他项目)同类逻辑**:ClassGenGeneric._mangle_generic_class_name / TypeGenResolve 的 slice 解析对 t.CPtr 的规范化(需 TPC 重建后排查,若 tpv.exe 编译含 list[t.CPtr] 的项目报同样错需对称修复)
---
## BUG:list[ptr].append 运行期读零页崩溃(编译已过)
**状态**:**未根修**,当前 BuildPipeline 用 `list[str]` 绕开(TPV `dc5bb21`)
### 现象
- TPC `2f0d52e`/`6ff76f3`/`c02f7db` 后编译通过,但 tpv.exe 运行期崩溃:
- ASAN: access-violation on 0x0000000000f8/0x128/0x148(地址随构建变化,读零页)
- 栈:`list[ptr].append` ← `run_llc_parallel` ← `RunMultiFileProject`
- 插桩 [LLC-DBG2] 确认 **list[ptr] 构造完全正常**:
`handles=… pool=ede31ff990 count=0 cap=8 elem=8 data=…`(pool 有效、elem_size=8 已生效)
### 分析
- elem_size 修复已生效(崩溃地址从 0xf8 变 0x128/0x148),构造正常 → 崩溃在 append 方法体
- `list[str]` 全库验证稳定、`list[ptr]` 崩溃 → 差异在 **`item: t.CPtr` 参数类型** 与 **`elem_ptr[0] = item` 的 store 生成**(TPC 特化 list[ptr] 时)
- 疑似:TPC 对 `t.CPtr`(无联合)作为泛型方法参数的类型解析 / `elem_ptr[0]` 的 store 宽度与类型不匹配
### 排查方向(TBD)
- 看 list[ptr].append 生成的 .ll / 反汇编 append 指令
- 对比 list[str].append 与 list[ptr].append 的 IR(store 宽度、参数类型)
- TPC 侧 `_HandleSubscriptStoreLlvm` 对 `elem_ptr[0] = item`(item 为 t.CPtr)的分支
### 相关提交
`2f0d52e`(特化根修) → `6ff76f3`(CPtr sizeof) → `c02f7db`(NameError) → `0d2e912`(定位插桩) → `dc5bb21`(list[str] 绕开)