1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- 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)
|