Make unreachable code a warning instead of an error (#14816)

* Make unreachable code a warning

* Adapt test

* Trigger CI
This commit is contained in:
Clyybber 2020-06-29 08:49:53 +02:00 • committed by GitHub
commit 299ddda5f6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 9 additions and 9 deletions

View file

@ -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",

View file

@ -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

View file

@ -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() =