diff options
author | SirOlaf <34164198+SirOlaf@users.noreply.github.com> | 2023-11-30 11:01:42 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-30 11:01:42 +0100 |
commit | 9140f8e2212c91347704cec0f98c0345ddf0ea1e (patch) | |
tree | c2d84df5151206007c78c4fc4973cc050de42c91 /tests | |
parent | 0f7ebb490ca1e2b7776aef1ec2b0cd8d942d42ce (diff) | |
download | Nim-9140f8e2212c91347704cec0f98c0345ddf0ea1e.tar.gz |
Fix endsInNoReturn for case statements (#23009)
While looking at the CI I noticed that there's a couple false positives for `case` statements that cannot be checked for exhaustiveness since my changes, this should resolve them. --------- Co-authored-by: SirOlaf <>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/controlflow/tunreachable.nim | 45 |
1 files changed, 41 insertions, 4 deletions
diff --git a/tests/controlflow/tunreachable.nim b/tests/controlflow/tunreachable.nim index 64e199e17..06321ce8a 100644 --- a/tests/controlflow/tunreachable.nim +++ b/tests/controlflow/tunreachable.nim @@ -2,9 +2,11 @@ discard """ cmd: "nim check --warningAsError:UnreachableCode $file" action: "reject" nimout: ''' -tunreachable.nim(24, 3) Error: unreachable code after 'return' statement or '{.noReturn.}' proc [UnreachableCode] -tunreachable.nim(31, 3) Error: unreachable code after 'return' statement or '{.noReturn.}' proc [UnreachableCode] -tunreachable.nim(40, 3) Error: unreachable code after 'return' statement or '{.noReturn.}' proc [UnreachableCode] +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] ''' """ @@ -39,4 +41,39 @@ proc main3() = return echo "after" -main3() \ No newline at end of file +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) |