mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
This commit is contained in:
@@ -2447,9 +2447,12 @@ proc semStmtList(c: PContext, n: PNode, flags: TExprFlags, expectedType: PType =
|
||||
else:
|
||||
n.typ = n[i].typ
|
||||
if not isEmptyType(n.typ): n.transitionSonsKind(nkStmtListExpr)
|
||||
if n[i].kind in nkLastBlockStmts or
|
||||
n[i].kind in nkCallKinds and n[i][0].kind == nkSym and
|
||||
sfNoReturn in n[i][0].sym.flags:
|
||||
var m = n[i]
|
||||
while m.kind in {nkStmtListExpr, nkStmtList} and m.len > 0: # from templates
|
||||
m = m.lastSon
|
||||
if m.kind in nkLastBlockStmts or
|
||||
m.kind in nkCallKinds and m[0].kind == nkSym and
|
||||
sfNoReturn in m[0].sym.flags:
|
||||
for j in i + 1..<n.len:
|
||||
case n[j].kind
|
||||
of nkPragma, nkCommentStmt, nkNilLit, nkEmpty, nkState: discard
|
||||
|
||||
32
tests/controlflow/tunreachable.nim
Normal file
32
tests/controlflow/tunreachable.nim
Normal file
@@ -0,0 +1,32 @@
|
||||
discard """
|
||||
cmd: "nim check --warningAsError:UnreachableCode $file"
|
||||
action: "reject"
|
||||
nimout: '''
|
||||
tunreachable.nim(23, 3) Error: unreachable code after 'return' statement or '{.noReturn.}' proc [UnreachableCode]
|
||||
tunreachable.nim(30, 3) 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()
|
||||
Reference in New Issue
Block a user