Make unreachable code a warning instead of an error (#14816)
* Make unreachable code a warning * Adapt test * Trigger CI
This commit is contained in:
parent
3732556468
commit
299ddda5f6
3 changed files with 9 additions and 9 deletions
|
|
@ -49,7 +49,8 @@ type
|
||||||
warnEachIdentIsTuple,
|
warnEachIdentIsTuple,
|
||||||
warnUnsafeSetLen,
|
warnUnsafeSetLen,
|
||||||
warnUnsafeDefault,
|
warnUnsafeDefault,
|
||||||
warnProveInit, warnProveField, warnProveIndex, warnUnreachableElse,
|
warnProveInit, warnProveField, warnProveIndex,
|
||||||
|
warnUnreachableElse, warnUnreachableCode,
|
||||||
warnStaticIndexCheck, warnGcUnsafe, warnGcUnsafe2,
|
warnStaticIndexCheck, warnGcUnsafe, warnGcUnsafe2,
|
||||||
warnUninit, warnGcMem, warnDestructor, warnLockLevel, warnResultShadowed,
|
warnUninit, warnGcMem, warnDestructor, warnLockLevel, warnResultShadowed,
|
||||||
warnInconsistentSpacing, warnCaseTransition, warnCycleCreated,
|
warnInconsistentSpacing, warnCaseTransition, warnCycleCreated,
|
||||||
|
|
@ -110,6 +111,7 @@ const
|
||||||
warnProveField: "cannot prove that field '$1' is accessible",
|
warnProveField: "cannot prove that field '$1' is accessible",
|
||||||
warnProveIndex: "cannot prove index '$1' is valid",
|
warnProveIndex: "cannot prove index '$1' is valid",
|
||||||
warnUnreachableElse: "unreachable else, all cases are already covered",
|
warnUnreachableElse: "unreachable else, all cases are already covered",
|
||||||
|
warnUnreachableCode: "unreachable code after 'return' statement or '{.noReturn.}' proc",
|
||||||
warnStaticIndexCheck: "$1",
|
warnStaticIndexCheck: "$1",
|
||||||
warnGcUnsafe: "not GC-safe: '$1'",
|
warnGcUnsafe: "not GC-safe: '$1'",
|
||||||
warnGcUnsafe2: "$1",
|
warnGcUnsafe2: "$1",
|
||||||
|
|
@ -169,7 +171,7 @@ const
|
||||||
"UnsafeCode", "UnusedImport", "InheritFromException",
|
"UnsafeCode", "UnusedImport", "InheritFromException",
|
||||||
"EachIdentIsTuple",
|
"EachIdentIsTuple",
|
||||||
"UnsafeSetLen", "UnsafeDefault",
|
"UnsafeSetLen", "UnsafeDefault",
|
||||||
"ProveInit", "ProveField", "ProveIndex", "UnreachableElse",
|
"ProveInit", "ProveField", "ProveIndex", "UnreachableElse", "UnreachableCode",
|
||||||
"IndexCheck", "GcUnsafe", "GcUnsafe2", "Uninit",
|
"IndexCheck", "GcUnsafe", "GcUnsafe2", "Uninit",
|
||||||
"GcMem", "Destructor", "LockLevel", "ResultShadowed",
|
"GcMem", "Destructor", "LockLevel", "ResultShadowed",
|
||||||
"Spacing", "CaseTransition", "CycleCreated",
|
"Spacing", "CaseTransition", "CycleCreated",
|
||||||
|
|
|
||||||
|
|
@ -2269,10 +2269,8 @@ proc semStmtList(c: PContext, n: PNode, flags: TExprFlags): PNode =
|
||||||
sfNoReturn in n[i][0].sym.flags:
|
sfNoReturn in n[i][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, nkBlockExpr,
|
of nkPragma, nkCommentStmt, nkNilLit, nkEmpty, nkState: discard
|
||||||
nkBlockStmt, nkState: discard
|
else: message(c.config, n[j].info, warnUnreachableCode)
|
||||||
else: localError(c.config, n[j].info,
|
|
||||||
"unreachable statement after 'return' statement or '{.noReturn.}' proc")
|
|
||||||
else: discard
|
else: discard
|
||||||
|
|
||||||
if result.len == 1 and
|
if result.len == 1 and
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
discard """
|
discard """
|
||||||
errormsg: "unreachable statement after 'return' statement or '{.noReturn.}' proc"
|
nimout: '''
|
||||||
file: "tstatret.nim"
|
tstatret.nim(9, 7) Warning: unreachable code after 'return' statement or '{.noReturn.}' proc [UnreachableCode]
|
||||||
line: 9
|
'''
|
||||||
"""
|
"""
|
||||||
# no statement after return
|
# no statement after return
|
||||||
proc main() =
|
proc main() =
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue