chore(dbg): P4 转移分支逐点探针(owned/begin/ensured/drop.begin/dropped)
崩点已后移到 CaseOwnershipTransfer 的 q = p(P4 别名转移),逐点定位该分支内具体崩溃位置。TEMP。
This commit is contained in:
1 parent
aeb396831a
commit
1a3ef521b3
1 file changed
+5
@@ -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)
|
||||
|
||||
Reference in new issue
Block a user