From b87732b5f13a39b00a82713a465db6c2f0fef40a Mon Sep 17 00:00:00 2001 From: ringabout <43030857+ringabout@users.noreply.github.com> Date: Fri, 17 May 2024 05:27:08 +0800 Subject: fixes #16671; openarray conversion for object construction (#23618) fixes #16671 related to https://github.com/nim-lang/Nim/pull/18911 --- compiler/ccgexprs.nim | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'compiler') diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index 9312933a4..0620b1fb8 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -1497,8 +1497,7 @@ proc handleConstExpr(p: BProc, n: PNode, d: var TLoc): bool = proc genFieldObjConstr(p: BProc; ty: PType; useTemp, isRef: bool; nField, val, check: PNode; d: var TLoc; r: Rope; info: TLineInfo) = - var tmp2: TLoc = default(TLoc) - tmp2.r = r + var tmp2 = TLoc(r: r) let field = lookupFieldAgain(p, ty, nField.sym, tmp2.r) if field.loc.r == "": fillObjectFields(p.module, ty) if field.loc.r == "": internalError(p.config, info, "genFieldObjConstr") @@ -1513,7 +1512,12 @@ proc genFieldObjConstr(p: BProc; ty: PType; useTemp, isRef: bool; nField, val, c tmp2.k = d.k tmp2.storage = if isRef: OnHeap else: d.storage tmp2.lode = val - expr(p, val, tmp2) + if nField.typ.skipTypes(abstractVar).kind in {tyOpenArray, tyVarargs}: + var tmp3 = getTemp(p, val.typ) + expr(p, val, tmp3) + genOpenArrayConv(p, tmp2, tmp3, {}) + else: + expr(p, val, tmp2) proc genObjConstr(p: BProc, e: PNode, d: var TLoc) = # inheritance in C++ does not allow struct initialization so -- cgit 1.4.1-2-gfad0