* fix #16469 vm float constants: do not conflate -0.0 and 0.0 * fix test for 32bit
This commit is contained in:
parent
0c8ce2dccf
commit
357729639f
2 changed files with 20 additions and 2 deletions
|
|
@ -453,7 +453,12 @@ proc sameConstant*(a, b: PNode): bool =
|
||||||
of nkSym: result = a.sym == b.sym
|
of nkSym: result = a.sym == b.sym
|
||||||
of nkIdent: result = a.ident.id == b.ident.id
|
of nkIdent: result = a.ident.id == b.ident.id
|
||||||
of nkCharLit..nkUInt64Lit: result = a.intVal == b.intVal
|
of nkCharLit..nkUInt64Lit: result = a.intVal == b.intVal
|
||||||
of nkFloatLit..nkFloat64Lit: result = a.floatVal == b.floatVal
|
of nkFloatLit..nkFloat64Lit:
|
||||||
|
result = cast[uint64](a.floatVal) == cast[uint64](b.floatVal)
|
||||||
|
# refs bug #16469
|
||||||
|
# if we wanted to only distinguish 0.0 vs -0.0:
|
||||||
|
# if a.floatVal == 0.0: result = cast[uint64](a.floatVal) == cast[uint64](b.floatVal)
|
||||||
|
# else: result = a.floatVal == b.floatVal
|
||||||
of nkStrLit..nkTripleStrLit: result = a.strVal == b.strVal
|
of nkStrLit..nkTripleStrLit: result = a.strVal == b.strVal
|
||||||
of nkType, nkNilLit: result = a.typ == b.typ
|
of nkType, nkNilLit: result = a.typ == b.typ
|
||||||
of nkEmpty: result = true
|
of nkEmpty: result = true
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ echo "Nim: ", f32, " (float)"
|
||||||
let f64: float64 = NaN
|
let f64: float64 = NaN
|
||||||
echo "Nim: ", f64, " (double)"
|
echo "Nim: ", f64, " (double)"
|
||||||
|
|
||||||
block: # issue #10305
|
block: # bug #10305
|
||||||
# with `-O3 -ffast-math`, generated C/C++ code is not nan compliant
|
# with `-O3 -ffast-math`, generated C/C++ code is not nan compliant
|
||||||
# user can pass `--passC:-ffast-math` if he doesn't care.
|
# user can pass `--passC:-ffast-math` if he doesn't care.
|
||||||
proc fun() =
|
proc fun() =
|
||||||
|
|
@ -42,3 +42,16 @@ block: # issue #10305
|
||||||
fun()
|
fun()
|
||||||
fun2(0)
|
fun2(0)
|
||||||
|
|
||||||
|
template main() =
|
||||||
|
# xxx move all tests under here
|
||||||
|
block: # bug #16469
|
||||||
|
let a1 = 0.0
|
||||||
|
let a2 = -0.0
|
||||||
|
let a3 = 1.0 / a1
|
||||||
|
let a4 = 1.0 / a2
|
||||||
|
doAssert a3 == Inf
|
||||||
|
doAssert a4 == -Inf
|
||||||
|
doAssert $(a1, a2, a3, a4) == "(0.0, -0.0, inf, -inf)"
|
||||||
|
|
||||||
|
static: main()
|
||||||
|
main()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue