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:
1 parent
c02f7dbaf1
commit
485ab0d329
1 file changed
+28
-1
@@ -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] 绕开)
|
||||
Reference in new issue
Block a user