summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorBung <crc32@qq.com>2023-08-11 18:50:31 +0800
committerGitHub <noreply@github.com>2023-08-11 18:50:31 +0800
commit3bb75f2dea1c65ee6b4b7fdca48748c97088cf76 (patch)
treeae14b34d396f3e6ee90c57aeb4d293cb6a01afba
parent9fed58d5a0ae073c06c67439507d27dd6202b217 (diff)
downloadNim-3bb75f2dea1c65ee6b4b7fdca48748c97088cf76.tar.gz
close #18103 internal error: inconsistent environment type (#22451)
-rw-r--r--tests/vm/t18103.nim35
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/vm/t18103.nim b/tests/vm/t18103.nim
new file mode 100644
index 000000000..8622ab290
--- /dev/null
+++ b/tests/vm/t18103.nim
@@ -0,0 +1,35 @@
+discard """
+  targets: "c cpp"
+  matrix: "--mm:refc; --mm:arc"
+"""
+
+import base64, complex, sequtils, math, sugar
+
+type
+
+  FP = float
+  T = object
+    index: int
+    arg: FP
+    val: Complex[FP]
+  M = object
+    alpha, beta: FP
+
+func a(s: openArray[T], model: M): seq[T] =
+  let f = (tn: int) => model.alpha + FP(tn) * model.beta;
+  return mapIt s:
+    block:
+      let s = it.val * rect(1.0, - f(it.index))
+      T(index: it.index, arg: phase(s), val: s)
+
+proc b(): float64 =
+  var s = toSeq(0..10).mapIt(T(index: it, arg: 1.0, val: complex.complex(1.0)))
+  discard a(s, M(alpha: 1, beta: 1))
+  return 1.0
+
+func cc(str: cstring, offset: ptr[cdouble]): cint {.exportc.} =
+  offset[] = b()
+  return 0
+
+static:
+  echo b()