Skip to content

Commit

Permalink
fixes #13661
Browse files Browse the repository at this point in the history
  • Loading branch information
Araq committed Mar 16, 2020
1 parent b9b53b6 commit 72ca97e
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 2 deletions.
1 change: 0 additions & 1 deletion compiler/semfold.nim
Original file line number Diff line number Diff line change
Expand Up @@ -439,7 +439,6 @@ proc foldConv(n, a: PNode; g: ModuleGraph; check = false): PNode =
result = newIntNodeT(toInt128(getFloat(a)), n, g)
of tyChar, tyUInt..tyUInt64, tyInt..tyInt64:
var val = a.getOrdValue

if check: rangeCheck(n, val, g)
result = newIntNodeT(val, n, g)
if dstTyp.kind in {tyUInt..tyUInt64}:
Expand Down
6 changes: 5 additions & 1 deletion compiler/types.nim
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,11 @@ proc isUnsigned*(t: PType): bool =
t.skipTypes(abstractInst).kind in {tyChar, tyUInt..tyUInt64}

proc getOrdValue*(n: PNode; onError = high(Int128)): Int128 =
case n.kind
var k = n.kind
if n.typ != nil and n.typ.skipTypes(abstractInst).kind in {tyChar, tyUInt..tyUInt64}:
k = nkUIntLit

case k
of nkCharLit, nkUIntLit..nkUInt64Lit:
# XXX: enable this assert
#assert n.typ == nil or isUnsigned(n.typ), $n.typ
Expand Down
12 changes: 12 additions & 0 deletions tests/misc/tunsignedconv.nim
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
discard """
output: '''uint'''
"""

# Tests unsigned literals and implicit conversion between uints and ints
# Passes if it compiles
Expand Down Expand Up @@ -43,3 +46,12 @@ block t4176:
var yyy: uint8 = 0
yyy = yyy - 127
doAssert type(yyy) is uint8

# bug #13661

proc fun(): uint = cast[uint](-1)
const x0 = fun()

echo typeof(x0)

discard $x0

0 comments on commit 72ca97e

Please sign in to comment.