summary refs log tree commit diff stats
path: root/tests/async/tasync_gcunsafe.nim
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2017-09-15 09:27:51 +0200
committerAndreas Rumpf <rumpf_a@web.de>2017-09-15 09:27:51 +0200
commit39f0195ebf30cc9f4b96953423298d7a2130eac8 (patch)
treebb4daf580c239b59d232e186814b69fc642ce6d5 /tests/async/tasync_gcunsafe.nim
parentbc738d63a728ee6030cc224c8808990a6f641feb (diff)
parent2ef65d5cdf3d65cbfab4c39796ddb4e70e9ebb37 (diff)
downloadNim-39f0195ebf30cc9f4b96953423298d7a2130eac8.tar.gz
Merge branch 'devel' into araq
Diffstat (limited to 'tests/async/tasync_gcunsafe.nim')
-rw-r--r--tests/async/tasync_gcunsafe.nim30
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/async/tasync_gcunsafe.nim b/tests/async/tasync_gcunsafe.nim
new file mode 100644
index 000000000..f4e2cdcf2
--- /dev/null
+++ b/tests/async/tasync_gcunsafe.nim
@@ -0,0 +1,30 @@
+discard """
+  cmd: "nim c --threads:on $file"
+  file: "asyncmacro.nim"
+  errormsg: "'anotherGCSafeAsyncProcIter' is not GC-safe as it calls 'asyncGCUnsafeProc'"
+"""
+
+assert compileOption("threads"), "this test will not do anything useful without --threads:on"
+
+import asyncdispatch
+
+var globalDummy: ref int
+proc gcUnsafeProc() =
+    if not globalDummy.isNil:
+        echo globalDummy[]
+
+proc asyncExplicitlyGCSafeProc() {.gcsafe, async.} =
+    echo "hi"
+
+proc asyncImplicitlyGCSafeProc() {.async.} =
+    echo "hi"
+
+proc asyncGCUnsafeProc() {.async.} =
+    gcUnsafeProc()
+
+proc anotherGCSafeAsyncProc() {.async, gcsafe.} =
+    # We should be able to call other gcsafe procs
+    await asyncExplicitlyGCSafeProc()
+    await asyncImplicitlyGCSafeProc()
+    # But we can't call gcunsafe procs
+    await asyncGCUnsafeProc()