mirror of
https://github.com/nim-lang/Nim.git
synced 2026-07-26 18:41:58 +00:00
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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user