summary refs log tree commit diff stats
path: root/tests/effects/teffects6.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/effects/teffects6.nim')
-rw-r--r--tests/effects/teffects6.nim33
1 files changed, 29 insertions, 4 deletions
diff --git a/tests/effects/teffects6.nim b/tests/effects/teffects6.nim
index e69fe73b6..d3af22434 100644
--- a/tests/effects/teffects6.nim
+++ b/tests/effects/teffects6.nim
@@ -1,3 +1,8 @@
+discard """
+action: compile
+"""
+
+# XXX: it is not actually tested if the effects are inferred
 
 type
   PMenu = ref object
@@ -11,17 +16,17 @@ createMenuItem(s, "Go to definition...",
       proc (i: PMenuItem, p: pointer) {.cdecl.} =
         try:
           echo(i.repr)
-        except EInvalidValue:
+        except ValueError:
           echo("blah")
 )
 
 
-proc noRaise(x: proc()) {.raises: [].} =
+proc noRaise(x: proc()) {.raises: [], effectsOf: x.} =
   # unknown call that might raise anything, but valid:
   x()
 
-proc doRaise() {.raises: [EIO].} =
-  raise newException(EIO, "IO")
+proc doRaise() {.raises: [IoError].} =
+  raise newException(IoError, "IO")
 
 proc use*() =
   noRaise(doRaise)
@@ -29,3 +34,23 @@ proc use*() =
 
 
 use()
+
+# bug #12642
+import os
+
+proc raises() {.raises: Exception.} = discard
+proc harmless() {.raises: [].} = discard
+
+let x = if paramStr(1) == "true": harmless else: raises
+
+let
+  choice = 0
+
+proc withoutSideEffects(): int = 0
+proc withSideEffects(): int = echo "foo" # the echo causes the side effect
+
+let procPtr = case choice
+              of 0: withoutSideEffects
+              else: withSideEffects
+
+echo procPtr.repr