mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-30 18:02:05 +00:00
31 lines
819 B
Nim
31 lines
819 B
Nim
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()
|