diff options
author | metagn <metagngn@gmail.com> | 2023-09-01 16:38:25 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-01 15:38:25 +0200 |
commit | 2542dc09c829a709050335066b0f414d6fc68fe2 (patch) | |
tree | e591967006d98b8d7ebfe22842c96e8e259c312f /tests/vm | |
parent | 6738f44af3866e4cace94d34b653acf3283f0cde (diff) | |
download | Nim-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.nim | 32 |
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 |