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)。
This commit is contained in:
TermiNexus committed 2026-08-19 23:35:12 +08:00
1 parent c02f7dbaf1
commit 485ab0d329
1 file changed
+28 -1
+28 -1
View File
@@ -39,5 +39,32 @@
- `DeclarationGenerator`:`CPtr` → `'ptr'`(声明端 mangled 统一,避免 `list[i8*]` vs `list[ptr]`)
### 待办
- [ ] 重建 TPV 验证:TPC 编译 BuildPipeline.vp 通过 + ClassArrayTest 不再误报
- [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] 绕开)