summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorFanael Linithien <fanael4@gmail.com>2020-11-12 09:28:32 +0100
committerGitHub <noreply@github.com>2020-11-12 09:28:32 +0100
commit7d4f70280ef33192dc5862f8b4c4d23e9d956b40 (patch)
treea0fd7459e3c74170f149854be61d9ca175aeb7a8
parente5db5316c2101a27efd744ba10126fdb57a7eb7c (diff)
downloadNim-7d4f70280ef33192dc5862f8b4c4d23e9d956b40.tar.gz
Fix #15909 (#15914)
-rw-r--r--compiler/varpartitions.nim1
-rw-r--r--tests/arc/t15909.nim16
2 files changed, 17 insertions, 0 deletions
diff --git a/compiler/varpartitions.nim b/compiler/varpartitions.nim
index 2e781c041..63c18d94a 100644
--- a/compiler/varpartitions.nim
+++ b/compiler/varpartitions.nim
@@ -399,6 +399,7 @@ proc allRoots(n: PNode; result: var seq[PSym]; followDotExpr = true) =
 proc destMightOwn(c: var Partitions; dest: var VarIndex; n: PNode) =
   ## Analyse if 'n' is an expression that owns the data, if so mark 'dest'
   ## with 'ownsData'.
+  if n.typ == nil: return
   case n.kind
   of nkEmpty, nkCharLit..nkNilLit:
     # primitive literals including the empty are harmless:
diff --git a/tests/arc/t15909.nim b/tests/arc/t15909.nim
new file mode 100644
index 000000000..f25c89daf
--- /dev/null
+++ b/tests/arc/t15909.nim
@@ -0,0 +1,16 @@
+discard """
+  action: run
+  cmd: "nim c --gc:arc $file"
+"""
+
+proc f1() {.noreturn.} = raise newException(CatchableError, "")
+
+proc f2(y: int): int =
+  if y != 0:
+    y
+  else:
+    f1()
+
+doAssert f2(5) == 5
+doAssertRaises(CatchableError):
+  discard f2(0)