fix #14585, fix #17589: access to static param now works (#17590)

This commit is contained in:
Timothee Cour 2021-03-31 02:25:26 -07:00 • committed by GitHub
commit 6d7d1e60fe
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 58 additions and 2 deletions

View file

@ -0,0 +1,56 @@
discard """
targets: "c cpp js"
"""
template main() =
block: # bug #17589
#[
# all those gave some variation of the same bug:
'intVal' is not accessible using discriminant 'kind' of type 'TFullReg'
'floatVal' is not accessible using discriminant 'kind' of type 'TFullReg'
]#
block:
proc f(a: static uint64): uint64 =
a
const x = 3'u64
static: doAssert f(x) == 3'u64
doAssert f(x) == 3'u64
block:
proc f(a: static uint64): uint64 =
a
const x = 3'u64
static: doAssert f(x) == 3'u64
doAssert f(x) == 3'u64
block:
proc foo(x: uint8): uint8 = x
proc f(a: static uint8): auto = foo(a)
const x = 3'u8
static: doAssert f(x) == 3'u8
doAssert f(x) == 3'u8
block:
template foo2(x: float) =
let b = x == 0
proc foo(x: float) = foo2(x)
proc f(a: static float) = foo(a)
const x = 1.0
static: f(x)
block:
proc foo(x: int32) =
let b = x == 0
proc f(a: static int32) = foo(a)
static: f(32767) # was working
static: f(32768) # was failing because >= int16.high (see isInt16Lit)
block: # bug #14585
const foo_m0ninv = 0x1234'u64
proc foo(m0ninv: static uint64) =
let b = $m0ninv
static:
foo(foo_m0ninv)
static: main()
main()