This commit is contained in:
parent
4480fd3e93
commit
c5eb3fd4f0
2 changed files with 38 additions and 3 deletions
|
|
@ -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()
|
||||
Loading…
Add table
Add a link
Reference in a new issue