fix #13902 distinct uint64 type corruption on 32-bit with borrow (#13907) [backport:1.2]

* fix #13902 distinct uint64 type corruption on 32-bit with borrow

Co-authored-by: Timothee Cour <timothee.cour2+lightsail@gmail.com>
This commit is contained in:
Timothee Cour
2020-04-08 00:56:16 -07:00
committed by GitHub
parent 3036ec9c44
commit 95fd8ae93c
2 changed files with 13 additions and 1 deletions

View File

@@ -2156,7 +2156,7 @@ proc genMagicExpr(p: BProc, e: PNode, d: var TLoc, op: TMagic) =
const opr: array[mInc..mDec, string] = ["+=", "-="]
const fun64: array[mInc..mDec, string] = ["nimAddInt64", "nimSubInt64"]
const fun: array[mInc..mDec, string] = ["nimAddInt","nimSubInt"]
let underlying = skipTypes(e[1].typ, {tyGenericInst, tyAlias, tySink, tyVar, tyLent, tyRange})
let underlying = skipTypes(e[1].typ, {tyGenericInst, tyAlias, tySink, tyVar, tyLent, tyRange, tyDistinct})
if optOverflowCheck notin p.options or underlying.kind in {tyUInt..tyUInt64}:
binaryStmt(p, e, d, opr[op])
else:

12
tests/ccgbugs/t13902.nim Normal file
View File

@@ -0,0 +1,12 @@
#issue #13902
block:
type Slot = distinct uint64
var s = Slot(1)
proc `$`(x: Slot): string {.borrow.}
proc `+=`(x: var Slot, y: uint64) {.borrow.}
# test was failing with either 0 or 2 echos but not with 1 echo
# echo "s = ", s
s += 1
# echo "s = ", s
doAssert s.uint64 == 2, $s # was failing, showing 18419607611339964418