From 3715fc41d54ae5c139fba79f1f61419e320e8ba5 Mon Sep 17 00:00:00 2001 From: flywind Date: Tue, 30 Mar 2021 16:27:24 +0800 Subject: fix #17512 (#17520) --- compiler/ccgcalls.nim | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/compiler/ccgcalls.nim b/compiler/ccgcalls.nim index 64b883087..2a93cb5af 100644 --- a/compiler/ccgcalls.nim +++ b/compiler/ccgcalls.nim @@ -259,6 +259,10 @@ proc withTmpIfNeeded(p: BProc, a: TLoc, needsTmp: bool): TLoc = else: result = a +proc literalsNeedsTmp(p: BProc, a: TLoc): TLoc = + getTemp(p, a.lode.typ, result, needsInit=false) + genAssignment(p, result, a, {}) + proc genArgStringToCString(p: BProc, n: PNode, needsTmp: bool): Rope {.inline.} = var a: TLoc initLocExpr(p, n[0], a) @@ -273,7 +277,10 @@ proc genArg(p: BProc, n: PNode, param: PSym; call: PNode, needsTmp = false): Rop result = openArrayLoc(p, param.typ, n) elif ccgIntroducedPtr(p.config, param, call[0].typ[0]): initLocExpr(p, n, a) - result = addrLoc(p.config, withTmpIfNeeded(p, a, needsTmp)) + if n.kind in {nkCharLit..nkNilLit}: + result = addrLoc(p.config, literalsNeedsTmp(p, a)) + else: + result = addrLoc(p.config, withTmpIfNeeded(p, a, needsTmp)) elif p.module.compileToCpp and param.typ.kind in {tyVar} and n.kind == nkHiddenAddr: initLocExprSingleUse(p, n[0], a) -- cgit 1.4.1-2-gfad0