From f8c48fc1863a243718acf86b699baed1a5c1512e Mon Sep 17 00:00:00 2001 From: cooldome Date: Fri, 28 Aug 2020 16:57:52 +0100 Subject: [PATCH] fix #15035 (#15236) --- compiler/injectdestructors.nim | 5 +++-- tests/arc/t14383.nim | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/compiler/injectdestructors.nim b/compiler/injectdestructors.nim index bac47b3d64..fcaa3c76a3 100644 --- a/compiler/injectdestructors.nim +++ b/compiler/injectdestructors.nim @@ -699,8 +699,9 @@ proc p(n: PNode; c: var Con; s: var Scope; mode: ProcessMode): PNode = elif n.kind in {nkObjDownConv, nkObjUpConv}: result = copyTree(n) result[0] = p(n[0], c, s, sinkArg) - elif n.typ == nil: - # 'raise X' can be part of a 'case' expression. Deal with it here: + elif n.typ == nil or n.typ.skipTypes({tyGenericInst, tyAlias, tySink, tyVar}).kind == tyOpenArray: + # 'raise X' can be part of a 'case' expression. Deal with it here. + # openarrays require perfect forwarding result = p(n, c, s, normal) else: # copy objects that are not temporary but passed to a 'sink' parameter diff --git a/tests/arc/t14383.nim b/tests/arc/t14383.nim index 115cbf426b..742088937f 100644 --- a/tests/arc/t14383.nim +++ b/tests/arc/t14383.nim @@ -3,6 +3,7 @@ discard """ output: ''' hello hello +@[4, 3, 2, 1] ''' """ @@ -11,3 +12,18 @@ import dmodule var val = parseMinValue() if val.kind == minDictionary: echo val + + +#------------------------------------------------------------------------------ +# Issue #15035 +#------------------------------------------------------------------------------ + +proc countRun(lst: sink openArray[int]): int = + discard + +proc timSort(lst: var openArray[int]) = + let run = countRun(lst) + +var a = @[4, 3, 2, 1] +timSort(a) +echo a \ No newline at end of file