mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-19 22:10:33 +00:00
* fix #10305 nim cpp is now nan-correct at CT * add example where simply `nim cpp -d:release` would exhibit nan bug
This commit is contained in:
committed by
Andreas Rumpf
parent
9a92bc15b3
commit
4355f23ee5
@@ -14,3 +14,31 @@ echo "Nim: ", f32, " (float)"
|
||||
|
||||
let f64: float64 = NaN
|
||||
echo "Nim: ", f64, " (double)"
|
||||
|
||||
block: # issue #10305
|
||||
# with `-O3 -ffast-math`, generated C/C++ code is not nan compliant
|
||||
# user can pass `--passC:-ffast-math` if he doesn't care.
|
||||
proc fun() =
|
||||
# this was previously failing at compile time with a nim compiler
|
||||
# that was compiled with `nim cpp -d:release`
|
||||
let a1 = 0.0
|
||||
let a = 0.0/a1
|
||||
let b1 = a == 0.0
|
||||
let b2 = a == a
|
||||
doAssert not b1
|
||||
doAssert not b2
|
||||
|
||||
proc fun2(i: int) =
|
||||
# this was previously failing simply with `nim cpp -d:release`; the
|
||||
# difference with above example is that optimization (const folding) can't
|
||||
# take place in this example to hide the non-compliant nan bug.
|
||||
let a = 0.0/(i.float)
|
||||
let b1 = a == 0.0
|
||||
let b2 = a == a
|
||||
doAssert not b1
|
||||
doAssert not b2
|
||||
|
||||
static: fun()
|
||||
fun()
|
||||
fun2(0)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user