summary refs log tree commit diff stats
path: root/tests/vm
diff options
context:
space:
mode:
authormetagn <metagngn@gmail.com>2023-09-01 16:38:25 +0300
committerGitHub <noreply@github.com>2023-09-01 15:38:25 +0200
commit2542dc09c829a709050335066b0f414d6fc68fe2 (patch)
treee591967006d98b8d7ebfe22842c96e8e259c312f /tests/vm
parent6738f44af3866e4cace94d34b653acf3283f0cde (diff)
downloadNim-2542dc09c829a709050335066b0f414d6fc68fe2.tar.gz
use dummy dest for void branches to fix noreturn in VM (#22617)
fixes #22216
Diffstat (limited to 'tests/vm')
-rw-r--r--tests/vm/tnoreturn.nim32
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/vm/tnoreturn.nim b/tests/vm/tnoreturn.nim
new file mode 100644
index 000000000..d4f8601a9
--- /dev/null
+++ b/tests/vm/tnoreturn.nim
@@ -0,0 +1,32 @@
+block: # issue #22216
+  type
+    Result[T, E] = object
+      case oVal: bool
+      of false:
+        eVal: E
+      of true:
+        vVal: T
+
+  func raiseResultDefect(m: string) {.noreturn, noinline.} =
+    raise (ref Defect)(msg: m)
+
+  template withAssertOk(self: Result, body: untyped): untyped =
+    case self.oVal
+    of false:
+      raiseResultDefect("Trying to access value with err Result")    
+    else:
+      body
+
+  func value[T, E](self: Result[T, E]): T {.inline.} =    
+    withAssertOk(self):  
+      self.vVal
+      
+  const
+    x = Result[int, string](oVal: true, vVal: 123)
+    z = x.value()
+    
+  let
+    xx = Result[int, string](oVal: true, vVal: 123)
+    zz = x.value()
+  
+  doAssert z == zz