blob: 06321ce8a9855eb772c1474704b6d63bc62b54a9 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
discard """
cmd: "nim check --warningAsError:UnreachableCode $file"
action: "reject"
nimout: '''
tunreachable.nim(26, 3) Error: unreachable code after 'return' statement or '{.noReturn.}' proc [UnreachableCode]
tunreachable.nim(33, 3) Error: unreachable code after 'return' statement or '{.noReturn.}' proc [UnreachableCode]
tunreachable.nim(42, 3) Error: unreachable code after 'return' statement or '{.noReturn.}' proc [UnreachableCode]
tunreachable.nim(65, 5) Error: unreachable code after 'return' statement or '{.noReturn.}' proc [UnreachableCode]
tunreachable.nim(77, 5) Error: unreachable code after 'return' statement or '{.noReturn.}' proc [UnreachableCode]
'''
"""
# bug #9839
template myquit1():untyped=
## foo
quit(1)
template myquit2():untyped=
echo 123
myquit1()
proc main1()=
# BUG: uncommenting this doesn't give `Error: unreachable statement`
myquit2()
echo "after"
main1()
proc main2() =
myquit1()
echo "after"
main2()
proc main3() =
if true:
return
else:
return
echo "after"
main3()
block:
# Cases like strings are not checked for exhaustiveness unless they have an else
proc main4(x: string) =
case x
of "a":
return
# reachable
echo "after"
main4("a")
proc main5(x: string) =
case x
of "a":
return
else:
return
# unreachable
echo "after"
main5("a")
block:
# In this case no else is needed because it's exhaustive
proc exhaustive(x: bool) =
case x
of true:
return
of false:
return
echo "after"
exhaustive(true)
|