chore(dbg): P4 转移分支逐点探针(owned/begin/ensured/drop.begin/dropped)

崩点已后移到 CaseOwnershipTransfer 的 q = p(P4 别名转移),逐点定位该分支内具体崩溃位置。TEMP。
This commit is contained in:
TermiNexus committed 2026-10-09 12:43:59 +08:00
1 parent aeb396831a
commit 1a3ef521b3
1 file changed
+5
+5
View File
@@ -765,12 +765,17 @@ novirtual class AssignGenMixin:
# (q 置 1、p 置 0)。此后对 p 重新赋值不会释放对象(p 已不拥有该对象),
# 出口只释放 q 一次。不转移的话,`p = None` 会把 q 指向的对象提前释放 → q 悬垂。
if src_slot is not None:
VLogger.info(f"dbg.xfer owned={self.Gen.VarGen._SlifeOwned(src_slot)}", "TR")
if self.Gen.VarGen._SlifeOwned(src_slot) != 0:
VLogger.info("dbg.xfer.p4.begin", "TR")
tsh: mlirlite.Value* = self.Gen.VarGen._SlifeEnsureOwned(pool, builder, target_slot)
VLogger.info("dbg.xfer.ensured", "TR")
if tsh is not None:
VLogger.info("dbg.xfer.drop.begin", "TR")
# 覆盖释放 target 原有对象:若它与源是**同一个对象**(自别名 `q = p; q = p`)
# 则跳过,否则会把两个槽共持的对象提前释放。
self.Gen.VarGen._SlifeDropOwnedUnlessSame(pool, builder, mod, trans, target_slot, src_slot)
VLogger.info("dbg.xfer.dropped", "TR")
self.Gen.VarGen._SlifeNoteStore(pool, builder, tsh, 1)
ssh: mlirlite.Value* = self.Gen.VarGen._SlifeShadow(src_slot)
if ssh is not None: self.Gen.VarGen._SlifeNoteStore(pool, builder, ssh, 0)