diff options
author | ringabout <43030857+ringabout@users.noreply.github.com> | 2024-08-13 20:02:52 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-13 14:02:52 +0200 |
commit | ddc47feccadf23423d969e970b816b9808335769 (patch) | |
tree | 54d63a3d3e3a269394faf8c35401cae3cd430ede | |
parent | c5b206d4ac6704147d9ec27506b9d0171f3a9501 (diff) | |
download | Nim-ddc47feccadf23423d969e970b816b9808335769.tar.gz |
fixes #23947; .uint8 compile-time error (#23948)
fixes #23947
-rw-r--r-- | compiler/vmgen.nim | 25 | ||||
-rw-r--r-- | tests/int/t1.nim | 10 |
2 files changed, 24 insertions, 11 deletions
diff --git a/compiler/vmgen.nim b/compiler/vmgen.nim index f29619e38..4abaed920 100644 --- a/compiler/vmgen.nim +++ b/compiler/vmgen.nim @@ -2228,18 +2228,21 @@ proc gen(c: PCtx; n: PNode; dest: var TDest; flags: TGenFlags = {}) = #discard genProc(c, s) genLit(c, newSymNode(n[namePos].sym), dest) of nkChckRangeF, nkChckRange64, nkChckRange: - let - tmp0 = c.genx(n[0]) - tmp1 = c.genx(n[1]) - tmp2 = c.genx(n[2]) - c.gABC(n, opcRangeChck, tmp0, tmp1, tmp2) - c.freeTemp(tmp1) - c.freeTemp(tmp2) - if dest >= 0: - gABC(c, n, whichAsgnOpc(n), dest, tmp0) - c.freeTemp(tmp0) + if skipTypes(n.typ, abstractVar).kind in {tyUInt..tyUInt64}: + genConv(c, n, n[0], dest) else: - dest = tmp0 + let + tmp0 = c.genx(n[0]) + tmp1 = c.genx(n[1]) + tmp2 = c.genx(n[2]) + c.gABC(n, opcRangeChck, tmp0, tmp1, tmp2) + c.freeTemp(tmp1) + c.freeTemp(tmp2) + if dest >= 0: + gABC(c, n, whichAsgnOpc(n), dest, tmp0) + c.freeTemp(tmp0) + else: + dest = tmp0 of nkEmpty, nkCommentStmt, nkTypeSection, nkConstSection, nkPragma, nkTemplateDef, nkIncludeStmt, nkImportStmt, nkFromStmt, nkExportStmt, nkMixinStmt, nkBindStmt, declarativeDefs, nkMacroDef: diff --git a/tests/int/t1.nim b/tests/int/t1.nim index d08f5f29b..f1d6c9a18 100644 --- a/tests/int/t1.nim +++ b/tests/int/t1.nim @@ -17,6 +17,16 @@ doAssert typeOf(myInt16 + 2i32) is int32 # of type `int32` doAssert int32 isnot int64 doAssert int32 isnot int +block: # bug #23947 + template foo = + let test_u64 : uint64 = 0xFF07.uint64 + let test_u8 : uint8 = test_u64.uint8 + # Error: illegal conversion from '65287' to '[0..255]' + doAssert test_u8 == 7 + + static: foo() + foo() + block: # bug #22085 const |