mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-19 05:50:30 +00:00
* 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:
@@ -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
12
tests/ccgbugs/t13902.nim
Normal 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
|
||||
Reference in New Issue
Block a user