summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorArne Döring <arne.doering@gmx.net>2019-05-07 08:29:17 +0200
committerAndreas Rumpf <rumpf_a@web.de>2019-05-07 08:29:17 +0200
commit6f7f043c9b8c782f81568c330200d6ae8addee69 (patch)
tree5efadda18ab44aade5a0eb8cd8a7921863945236 /compiler
parenta6ba3116b2376d9f3476ef0f8db5bbb32afc2a76 (diff)
downloadNim-6f7f043c9b8c782f81568c330200d6ae8addee69.tar.gz
Fix type recursion check (#11144)
* fixes #3456
* add test #3456
Diffstat (limited to 'compiler')
-rw-r--r--compiler/types.nim9
1 files changed, 5 insertions, 4 deletions
diff --git a/compiler/types.nim b/compiler/types.nim
index 199bd3352..a40a94421 100644
--- a/compiler/types.nim
+++ b/compiler/types.nim
@@ -1517,11 +1517,12 @@ proc typeMismatch*(conf: ConfigRef; info: TLineInfo, formal, actual: PType) =
     localError(conf, info, msg)
 
 proc isTupleRecursive(t: PType, cycleDetector: var IntSet): bool =
-  if t == nil: return
+  if t == nil:
+    return false
+  if cycleDetector.containsOrIncl(t.id):
+    return true
   case t.kind:
     of tyTuple:
-      if cycleDetector.containsOrIncl(t.id):
-        return true
       var cycleDetectorCopy: IntSet
       for i in  0..<t.len:
         assign(cycleDetectorCopy, cycleDetector)
@@ -1530,7 +1531,7 @@ proc isTupleRecursive(t: PType, cycleDetector: var IntSet): bool =
     of tyAlias, tyRef, tyPtr, tyGenericInst, tyVar, tyLent, tySink, tyArray, tyUncheckedArray, tySequence:
       return isTupleRecursive(t.lastSon, cycleDetector)
     else:
-      discard
+      return false
 
 proc isTupleRecursive*(t: PType): bool =
   var cycleDetector = initIntSet()