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 <>
(cherry picked from commit 9140f8e221)
This commit is contained in:
SirOlaf
2023-11-30 11:01:42 +01:00
committed by narimiran
parent 9f35ede1a8
commit 4bc45bb6bc
3 changed files with 64 additions and 14 deletions

View File

@@ -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()
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)