summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorringabout <43030857+ringabout@users.noreply.github.com>2024-04-18 17:57:44 +0800
committerGitHub <noreply@github.com>2024-04-18 17:57:44 +0800
commitacd4c8a3530c42143541b7d891aa61fd0af3f8d3 (patch)
treebb50e57ab2a84157b554b32a5a99fcd6f314d870 /compiler
parent49e1ca0b3e53709b993f63288a164cd843c70c82 (diff)
downloadNim-acd4c8a3530c42143541b7d891aa61fd0af3f8d3.tar.gz
fixes #23505; fixes injectdestructors errors on transformed addr (deref) refs (#23507)
fixes #23505
Diffstat (limited to 'compiler')
-rw-r--r--compiler/injectdestructors.nim5
1 files changed, 4 insertions, 1 deletions
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)