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:
|
else:
|
||||||
n.typ = n[i].typ
|
n.typ = n[i].typ
|
||||||
if not isEmptyType(n.typ): n.transitionSonsKind(nkStmtListExpr)
|
if not isEmptyType(n.typ): n.transitionSonsKind(nkStmtListExpr)
|
||||||
if n[i].kind in nkLastBlockStmts or
|
var m = n[i]
|
||||||
n[i].kind in nkCallKinds and n[i][0].kind == nkSym and
|
while m.kind in {nkStmtListExpr, nkStmtList} and m.len > 0: # from templates
|
||||||
sfNoReturn in n[i][0].sym.flags:
|
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:
|
for j in i + 1..<n.len:
|
||||||
case n[j].kind
|
case n[j].kind
|
||||||
of nkPragma, nkCommentStmt, nkNilLit, nkEmpty, nkState: discard
|
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