From d7671d366547c84ee47272e8511bdbf6f4d3ef6c Mon Sep 17 00:00:00 2001 From: ringabout <43030857+ringabout@users.noreply.github.com> Date: Fri, 28 Feb 2025 20:52:39 +0800 Subject: [PATCH] tests sink string in refc --- compiler/ccgexprs.nim | 19 +++++++++++-------- testament/important_packages.nim | 2 +- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index fdd8553a3e..72c741b12b 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -368,14 +368,17 @@ proc genAssignment(p: BProc, dest, src: TLoc, flags: TAssignmentFlags) = elif dest.storage == OnHeap: let rd = rdLoc(dest) let rs = rdLoc(src) - # we use a temporary to care for the dreaded self assignment: - var tmp: TLoc = getTemp(p, ty) - let rtmp = rdLoc(tmp) - p.s(cpsStmts).addAssignment(rtmp, rd) - p.s(cpsStmts).addAssignmentWithValue(rd): - p.s(cpsStmts).addCall(cgsymValue(p.module, "copyStringRC1"), rs) - p.s(cpsStmts).addSingleIfStmt(rtmp): - p.s(cpsStmts).addCallStmt(cgsymValue(p.module, "nimGCunrefNoCycle"), rtmp) + if dest.lode.typ.kind == tySink: + p.s(cpsStmts).addAssignment(rd, rs) + else: + # we use a temporary to care for the dreaded self assignment: + var tmp: TLoc = getTemp(p, ty) + let rtmp = rdLoc(tmp) + p.s(cpsStmts).addAssignment(rtmp, rd) + p.s(cpsStmts).addAssignmentWithValue(rd): + p.s(cpsStmts).addCall(cgsymValue(p.module, "copyStringRC1"), rs) + p.s(cpsStmts).addSingleIfStmt(rtmp): + p.s(cpsStmts).addCallStmt(cgsymValue(p.module, "nimGCunrefNoCycle"), rtmp) else: let rad = addrLoc(p.config, dest) let rs = rdLoc(src) diff --git a/testament/important_packages.nim b/testament/important_packages.nim index 2471a2d113..055c2c4d58 100644 --- a/testament/important_packages.nim +++ b/testament/important_packages.nim @@ -51,7 +51,7 @@ pkg "cello", url = "https://github.com/nim-lang/cello", useHead = true pkg "checksums" pkg "chroma" pkg "chronicles", "nim c -o:chr -r chronicles.nim" -pkg "chronos", "nim c -r -d:release tests/testall" +pkg "chronos", "nim c -r -d:release --mm:refc tests/testall" pkg "cligen", "nim c --path:. -r cligen.nim" pkg "combparser", "nimble test --mm:orc" pkg "compactdict"