summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2018-04-06 13:10:22 +0200
committerAraq <rumpf_a@web.de>2018-04-06 13:10:22 +0200
commitaa6353e4fa2115010f6217c99dfd140a3421dde0 (patch)
tree449343a6df0aad6abb0b7f4217b0a85504c9abc5
parent824092be312ff16445f137c4322d0cd3cc95fb2e (diff)
downloadNim-aa6353e4fa2115010f6217c99dfd140a3421dde0.tar.gz
fixes #6843
-rw-r--r--compiler/ccgexprs.nim2
-rw-r--r--tests/statictypes/tstackmatrix.nim29
2 files changed, 30 insertions, 1 deletions
diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim
index 6ee7d698e..b0065c7fe 100644
--- a/compiler/ccgexprs.nim
+++ b/compiler/ccgexprs.nim
@@ -271,7 +271,7 @@ proc genAssignment(p: BProc, dest, src: TLoc, flags: TAssignmentFlags) =
     # little HACK to support the new 'var T' as return type:
     linefmt(p, cpsStmts, "$1 = $2;$n", rdLoc(dest), rdLoc(src))
     return
-  let ty = skipTypes(dest.t, abstractRange + tyUserTypeClasses)
+  let ty = skipTypes(dest.t, abstractRange + tyUserTypeClasses + {tyStatic})
   case ty.kind
   of tyRef:
     genRefAssign(p, dest, src, flags)
diff --git a/tests/statictypes/tstackmatrix.nim b/tests/statictypes/tstackmatrix.nim
new file mode 100644
index 000000000..2509d21f8
--- /dev/null
+++ b/tests/statictypes/tstackmatrix.nim
@@ -0,0 +1,29 @@
+discard """
+  output: "(M: 3, N: 3, fp: ...)"
+"""
+
+# bug #6843
+
+type
+  OrderType = enum colMajor, rowMajor
+  Matrix[A] = object
+    M, N: int
+    fp: ptr A # float pointer
+  DoubleArray64[M, N: static[int]] = array[M, array[N, float64]]
+
+
+proc stackMatrix[M, N: static[int]](a: var DoubleArray64[M, N], order = colMajor): Matrix[float64] =
+  Matrix[float64](
+    fp: addr a[0][0],
+    M: (if order == colMajor: N else: M),
+    N: (if order == colMajor: M else: N)
+  )
+
+var
+  data = [
+    [1'f64, 2, 3],
+    [4'f64, 5, 6],
+    [7'f64, 8, 9]
+  ]
+  m = stackMatrix(data)
+echo m
\ No newline at end of file