mirror of
https://github.com/nim-lang/Nim.git
synced 2026-06-03 02:18:00 +00:00
fixes #24754
This commit is contained in:
@@ -1164,7 +1164,7 @@ proc moveOrCopy(dest, ri: PNode; c: var Con; s: var Scope, flags: set[MoveOrCopy
|
||||
c.finishCopy(result, dest, flags, isFromSink = false)
|
||||
of nkHiddenSubConv, nkHiddenStdConv, nkConv, nkObjDownConv, nkObjUpConv, nkCast:
|
||||
result = c.genSink(s, dest, p(ri, c, s, sinkArg), flags)
|
||||
of nkStmtListExpr, nkBlockExpr, nkIfExpr, nkCaseStmt, nkTryStmt:
|
||||
of nkStmtListExpr, nkBlockExpr, nkIfExpr, nkCaseStmt, nkTryStmt, nkPragmaBlock:
|
||||
template process(child, s): untyped = moveOrCopy(dest, child, c, s, flags)
|
||||
# We know the result will be a stmt so we use that fact to optimize
|
||||
handleNestedTempl(ri, process, willProduceStmt = true)
|
||||
|
||||
@@ -898,3 +898,17 @@ proc bar =
|
||||
mutate(("1.2", 0, 0))
|
||||
|
||||
bar()
|
||||
|
||||
block: # bug #24754
|
||||
type NoCopy = object
|
||||
id: int
|
||||
|
||||
proc `=copy`(a: var NoCopy, b: NoCopy) {.error.}
|
||||
|
||||
|
||||
proc foo(): NoCopy =
|
||||
{.gcsafe.}:
|
||||
let s = 12
|
||||
NoCopy(id: s)
|
||||
|
||||
doAssert foo().id == 12
|
||||
|
||||
Reference in New Issue
Block a user