diff --git a/compiler/injectdestructors.nim b/compiler/injectdestructors.nim index 08d27f77c3..8d975e69ef 100644 --- a/compiler/injectdestructors.nim +++ b/compiler/injectdestructors.nim @@ -382,9 +382,16 @@ proc pArg(arg: PNode; c: var Con; isSink: bool): PNode = # sink parameter (bug #11524). Note that the string implementation is # different and can deal with 'const string sunk into var'. result = passCopyToSink(arg, c) - elif arg.kind in {nkBracket, nkObjConstr, nkTupleConstr, nkClosure} + nkLiterals: + elif arg.kind in nkLiterals: + result = arg # literal to sink parameter: nothing to do + elif arg.kind in {nkBracket, nkObjConstr, nkTupleConstr, nkClosure}: # object construction to sink parameter: nothing to do - result = arg + result = copyTree(arg) + for i in ord(arg.kind in {nkObjConstr, nkClosure})..