Skip to content

Commit

Permalink
fixes #15280 [backport:1.2] (#15281)
Browse files Browse the repository at this point in the history
* fixes #15280 [backport:1.2]

* make tests green again

* adapt tests

(cherry picked from commit 3f00a73)
  • Loading branch information
Araq authored and narimiran committed Sep 11, 2020
1 parent 0845e88 commit 7bba0de
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 2 deletions.
2 changes: 1 addition & 1 deletion compiler/sem.nim
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ proc endsInNoReturn(n: PNode): bool =
var it = n
while it.kind in {nkStmtList, nkStmtListExpr} and it.len > 0:
it = it.lastSon
result = it.kind in nkLastBlockStmts or
result = it.kind in (nkLastBlockStmts-{nkReturnStmt}) or
it.kind in nkCallKinds and it[0].kind == nkSym and sfNoReturn in it[0].sym.flags

proc commonType*(x: PType, y: PNode): PType =
Expand Down
2 changes: 1 addition & 1 deletion tests/casestmt/tcasestmt.nim
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ func foo(input: string): int =
try:
parseInt(input)
except:
return
0

func foo2(b, input: string): int =
case b:
Expand Down
44 changes: 44 additions & 0 deletions tests/semreject/tmixing_return_and_exprs.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
discard """
errormsg: "expression 'len(src) shl 1' is of type 'int' and has to be used (or discarded)"
line: 19
"""

# bug #15280

type
HexFlags* {.pure.} = enum
LowerCase, ## Produce lowercase hexadecimal characters
PadOdd, ## Pads odd strings
SkipSpaces, ## Skips all the whitespace characters inside of string
SkipPrefix ## Skips `0x` and `x` prefixes at the begining of string


proc bytesToHex*(src: openarray[byte], dst: var openarray[char],
flags: set[HexFlags]): int =
if len(dst) == 0:
(len(src) shl 1)
else:
var halflast = false
let dstlen = len(dst)
var srclen = len(src)

if dstlen < (srclen shl 1):
if (dstlen and 1) == 1:
srclen = (dstlen - 1) shr 1
halflast = true
else:
srclen = (dstlen shr 1)

let lowercase = (HexFlags.LowerCase in flags)

var k = 0
for i in 0 ..< srclen:
let x = int(src[i])
inc(k, 2)

if halflast:
let x = int(src[srclen])
inc(k)

return k

0 comments on commit 7bba0de

Please sign in to comment.