summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/vmgen.nim6
-rw-r--r--tests/vm/t9043.nim10
2 files changed, 13 insertions, 3 deletions
diff --git a/compiler/vmgen.nim b/compiler/vmgen.nim
index b6b5bf4f2..e612d7a2a 100644
--- a/compiler/vmgen.nim
+++ b/compiler/vmgen.nim
@@ -1529,7 +1529,7 @@ proc genRdVar(c: PCtx; n: PNode; dest: var TDest; flags: TGenFlags) =
 
 template needsRegLoad(): untyped =
   {gfNode, gfNodeAddr} * flags == {} and
-    fitsRegister(n.typ.skipTypes({tyVar, tyLent}))
+    fitsRegister(n.typ.skipTypes({tyVar, tyLent, tyStatic}))
 
 proc genArrAccess2(c: PCtx; n: PNode; dest: var TDest; opc: TOpcode;
                    flags: TGenFlags) =
@@ -1590,7 +1590,7 @@ proc getNullValueAux(obj: PNode, result: PNode; conf: ConfigRef) =
   else: globalError(conf, result.info, "cannot create null element for: " & $obj)
 
 proc getNullValue(typ: PType, info: TLineInfo; conf: ConfigRef): PNode =
-  var t = skipTypes(typ, abstractRange-{tyTypeDesc})
+  var t = skipTypes(typ, abstractRange+{tyStatic}-{tyTypeDesc})
   case t.kind
   of tyBool, tyEnum, tyChar, tyInt..tyInt64:
     result = newNodeIT(nkIntLit, info, t)
@@ -1602,7 +1602,7 @@ proc getNullValue(typ: PType, info: TLineInfo; conf: ConfigRef): PNode =
     result = newNodeIT(nkStrLit, info, t)
     result.strVal = ""
   of tyVar, tyLent, tyPointer, tyPtr, tyExpr,
-     tyStmt, tyTypeDesc, tyStatic, tyRef, tyNil:
+     tyStmt, tyTypeDesc, tyRef, tyNil:
     result = newNodeIT(nkNilLit, info, t)
   of tyProc:
     if t.callConv != ccClosure:
diff --git a/tests/vm/t9043.nim b/tests/vm/t9043.nim
new file mode 100644
index 000000000..1ae2e383c
--- /dev/null
+++ b/tests/vm/t9043.nim
@@ -0,0 +1,10 @@
+discard """
+  nimout: "(Field0: 2, Field1: 2, Field2: 2, Field3: 2)"
+"""
+
+proc foo[N: static[int]](dims: array[N, int])=
+  const N1 = N
+  const N2 = dims.len
+  static: echo (N, dims.len, N1, N2)
+
+foo([1, 2])