summary refs log tree commit diff stats
path: root/compiler/semexprs.nim
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/semexprs.nim')
-rw-r--r--compiler/semexprs.nim14
1 files changed, 10 insertions, 4 deletions
diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim
index d920b0f25..56de00d56 100644
--- a/compiler/semexprs.nim
+++ b/compiler/semexprs.nim
@@ -2267,13 +2267,19 @@ proc semMagic(c: PContext, n: PNode, s: PSym, flags: TExprFlags): PNode =
   of mSizeOf:
     markUsed(c, n.info, s)
     result = semSizeof(c, setMs(n, s))
+  of mSetLengthSeq:
+    result = semDirectOp(c, n, flags)
+    let seqType = result[1].typ.skipTypes({tyPtr, tyRef, # in case we had auto-dereferencing
+                                           tyVar, tyGenericInst, tyOwned, tySink,
+                                           tyAlias, tyUserTypeClassInst})
+    if seqType.kind == tySequence and seqType.base.requiresInit:
+      localError(c.config, n.info, "setLen can potentially expand the sequence, " &
+                                   "but the element type $1 doesn't have a default value.",
+                                   [typeToString(seqType.base)])
   of mDefault:
     result = semDirectOp(c, n, flags)
     c.config.internalAssert result[1].typ.kind == tyTypeDesc
-    let typ = result[1].typ.base
-    if typ.kind == tyObject:
-      checkDefaultConstruction(c, typ, n.info)
-    elif typ.kind in {tyRef, tyPtr} and tfNotNil in typ.flags:
+    if result[1].typ.base.requiresInit:
       localError(c.config, n.info, "not nil types don't have a default value")
   else:
     result = semDirectOp(c, n, flags)