summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/types.nim8
-rw-r--r--tests/errmsgs/tnested_empty_seq.nim8
2 files changed, 15 insertions, 1 deletions
diff --git a/compiler/types.nim b/compiler/types.nim
index 70b4b5aa2..a930779bf 100644
--- a/compiler/types.nim
+++ b/compiler/types.nim
@@ -1160,9 +1160,13 @@ proc typeAllowedAux(marker: var IntSet, typ: PType, kind: TSymKind,
   of tySequence, tyOpt:
     if t.sons[0].kind != tyEmpty:
       result = typeAllowedAux(marker, t.sons[0], skVar, flags+{taHeap})
+    elif kind in {skVar, skLet}:
+      result = t.sons[0]
   of tyArray:
     if t.sons[1].kind != tyEmpty:
       result = typeAllowedAux(marker, t.sons[1], skVar, flags)
+    elif kind in {skVar, skLet}:
+      result = t.sons[1]
   of tyRef:
     if kind == skConst: result = t
     else: result = typeAllowedAux(marker, t.lastSon, skVar, flags+{taHeap})
@@ -1181,7 +1185,9 @@ proc typeAllowedAux(marker: var IntSet, typ: PType, kind: TSymKind,
       if result != nil: break
     if result.isNil and t.n != nil:
       result = typeAllowedNode(marker, t.n, kind, flags)
-  of tyProxy, tyEmpty:
+  of tyEmpty:
+    if kind in {skVar, skLet}: result = t
+  of tyProxy:
     # for now same as error node; we say it's a valid type as it should
     # prevent cascading errors:
     result = nil
diff --git a/tests/errmsgs/tnested_empty_seq.nim b/tests/errmsgs/tnested_empty_seq.nim
new file mode 100644
index 000000000..ffe8bc3ee
--- /dev/null
+++ b/tests/errmsgs/tnested_empty_seq.nim
@@ -0,0 +1,8 @@
+discard """
+  errormsg: "invalid type: 'empty' in this context: 'array[0..0, tuple of (string, seq[empty])]' for var"
+  line: 8
+"""
+
+# bug #3948
+
+var headers=[("headers", @[])]