TermiNexus
4203b4754f
fix(mlirlitetest): 子池改在 main 帧内构造,修复返回本帧栈对象指针导致的悬空写穿
现象:Test 1 第一次 alloc 就报 memhub "_split_to_order max_order 非法(字段被写穿): max_order=450754216 usable_size=2096864"(子池对象只有 max_order 是垃圾、相邻字段正常)。
静态查 IR 定根因(temp/a2/a2d629ccc917eaa6.ll):_sub_pool 内 %13 = alloca %MemBuddy,__before_init__/__init__ 都作用在这个栈对象上,最后 ret %MemBuddy* —— Viper 中无 __new__ 的类实例是值语义(降级为栈 alloca),返回"指向本帧局部对象"的指针即悬空;调用方第一次 alloc 读 max_order 落到复用后的栈垃圾。
修复:删掉返回 MemBuddy* 的 _sub_pool 助手,改为在 main 帧内逐测试构造子池(与原代码在 main 建池同款;main 内同样的 alloca %MemBuddy 一直有效,故原版能跑到 Test 14)。