summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorcooldome <ariabushenko@gmail.com>2020-08-28 16:57:52 +0100
committerGitHub <noreply@github.com>2020-08-28 17:57:52 +0200
commitf8c48fc1863a243718acf86b699baed1a5c1512e (patch)
tree4447e2b1aa5b44a49dd94c6083c18309237cdbcf /compiler
parentfb58066b61b14f4a1d6cdb0f4a8f0a9ea4174d82 (diff)
downloadNim-f8c48fc1863a243718acf86b699baed1a5c1512e.tar.gz
fix #15035 (#15236)
Diffstat (limited to 'compiler')
-rw-r--r--compiler/injectdestructors.nim5
1 files changed, 3 insertions, 2 deletions
diff --git a/compiler/injectdestructors.nim b/compiler/injectdestructors.nim
index bac47b3d6..fcaa3c76a 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