From 485ab0d329769da85685624a673f0e679162181b Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Wed, 19 Aug 2026 23:35:12 +0800 Subject: [PATCH] =?UTF-8?q?docs(todo):=20=E8=AE=B0=E5=BD=95=20list[ptr].ap?= =?UTF-8?q?pend=20=E8=BF=90=E8=A1=8C=E6=9C=9F=E8=AF=BB=E9=9B=B6=E9=A1=B5?= =?UTF-8?q?=E5=B4=A9=E6=BA=83=E5=BE=85=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 编译问题已解(2f0d52e 系列),但 list[ptr].append 运行期崩溃(读零页 0xf8/0x128/0x148)未根修:构造插桩确认 pool 有效 elem=8,差异在 item:t.CPtr 参数/lem_ptr[0]=item store 生成。当前 BuildPipeline 用 list[str] 绕开(TPV dc5bb21)。 --- TODO.md | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/TODO.md b/TODO.md index b66b62d..acd78bf 100644 --- a/TODO.md +++ b/TODO.md @@ -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] 绕开)