From acd4c8a3530c42143541b7d891aa61fd0af3f8d3 Mon Sep 17 00:00:00 2001 From: ringabout <43030857+ringabout@users.noreply.github.com> Date: Thu, 18 Apr 2024 17:57:44 +0800 Subject: fixes #23505; fixes injectdestructors errors on transformed addr (deref) refs (#23507) fixes #23505 --- compiler/injectdestructors.nim | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'compiler') diff --git a/compiler/injectdestructors.nim b/compiler/injectdestructors.nim index 115ef29c0..6b7676653 100644 --- a/compiler/injectdestructors.nim +++ b/compiler/injectdestructors.nim @@ -412,7 +412,10 @@ proc genDefaultCall(t: PType; c: Con; info: TLineInfo): PNode = proc destructiveMoveVar(n: PNode; c: var Con; s: var Scope): PNode = # generate: (let tmp = v; reset(v); tmp) if (not hasDestructor(c, n.typ)) and c.inEnsureMove == 0: - assert n.kind != nkSym or not hasDestructor(c, n.sym.typ) + assert n.kind != nkSym or not hasDestructor(c, n.sym.typ) or + (n.typ.kind == tyPtr and n.sym.typ.kind == tyRef) + # bug #23505; transformed by `transf`: addr (deref ref) -> ptr + # we know it's really a pointer; so here we assign it directly result = copyTree(n) else: result = newNodeIT(nkStmtListExpr, n.info, n.typ) -- cgit 1.4.1-2-gfad0