# 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] 绕开)