summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2021-06-23 23:31:17 +0200
committerGitHub <noreply@github.com>2021-06-23 23:31:17 +0200
commit0f91b67f5c15328330f74a8769aed9961940aab2 (patch)
tree5d951ba9d9a7fde6bbd815fa0d304dd3657e3762
parent496bd790e1b641a7c025bde2c6a1c6dca433ed5d (diff)
downloadNim-0f91b67f5c15328330f74a8769aed9961940aab2.tar.gz
fixes #18326 (#18335)
* fixes #18326

* make tests green again
-rw-r--r--compiler/isolation_check.nim4
-rw-r--r--tests/isolate/tisolate.nim9
2 files changed, 9 insertions, 4 deletions
diff --git a/compiler/isolation_check.nim b/compiler/isolation_check.nim
index 43db5d59b..777e7f6ce 100644
--- a/compiler/isolation_check.nim
+++ b/compiler/isolation_check.nim
@@ -64,7 +64,7 @@ proc canAlias(arg, ret: PType; marker: var IntSet): bool =
   else:
     result = false
 
-proc isValueOnlyType(t: PType): bool = 
+proc isValueOnlyType(t: PType): bool =
   # t doesn't contain pointers and references
   proc wrap(t: PType): bool {.nimcall.} = t.kind in {tyRef, tyPtr, tyVar, tyLent}
   result = not types.searchTypeFor(t, wrap)
@@ -88,7 +88,7 @@ proc checkIsolate*(n: PNode): bool =
       # XXX: as long as we don't update the analysis while examining arguments
       #      we can do an early check of the return type, otherwise this is a
       #      bug and needs to be moved below
-      if n[0].typ.flags * {tfGcSafe, tfNoSideEffect} == {}:
+      if tfNoSideEffect notin n[0].typ.flags:
         return false
       for i in 1..<n.len:
         if checkIsolate(n[i]):
diff --git a/tests/isolate/tisolate.nim b/tests/isolate/tisolate.nim
index 9f3b15441..a0e71e321 100644
--- a/tests/isolate/tisolate.nim
+++ b/tests/isolate/tisolate.nim
@@ -1,12 +1,17 @@
 discard """
   errormsg: "expression cannot be isolated: select(a, b)"
-  line: 34
+  line: 39
 """
 
 import std / isolation
 
 import json, streams
 
+proc myParseJson(s: Stream; filename: string): JsonNode =
+  {.cast(noSideEffect).}:
+    result = parseJson(s, filename)
+
+
 proc f(): seq[int] =
   @[1, 2, 3]
 
@@ -28,7 +33,7 @@ proc main =
   discard isolate select(Node(x: "a"), nil)
   discard isolate select(Node(x: "a"), Node(x: "b"))
 
-  discard isolate parseJson(newFileStream("my.json"), "my.json")
+  discard isolate myParseJson(newFileStream("my.json"), "my.json")
 
   var a, b: Node
   discard isolate select(a, b)