ffi005 fails on OS X
The ffi005 test is failing on OS X x86.
The test is only run the optc way, but we get other bad results when compiling in other ways.
normal:
{-# LANGUAGE ForeignFunctionInterface #-}
import Control.Monad
import Foreign.C
main :: IO ()
main = doit sin mysin (encodeFloat 7926335344172077 (-54))
doit :: (CDouble -> CDouble) -> (CDouble -> CDouble) -> CDouble -> IO ()
doit f g x = do let fx = f x
gx = g x
when (fx /= gx) $ do print x
print (decodeFloat x)
print fx
print gx
print (fx - gx)
foreign import ccall "sin" mysin :: CDouble -> CDouble
$ ghc q.hs -o q; ./q
0.4400000000000002
(7926335344172077,-54)
0.4259394650659998
0.42593946506599983
-5.551115123125783e-17
optc:
{-# LANGUAGE ForeignFunctionInterface #-}
import Control.Monad
import Foreign
import Foreign.C
main :: IO ()
main = do sin_addr <- wrapId sin
doit sin (dyn_sin sin_addr) (encodeFloat 7926335344172077 (-54))
freeHaskellFunPtr sin_addr
doit :: (CDouble -> CDouble) -> (CDouble -> CDouble) -> CDouble -> IO ()
doit f g x = do let fx = f x
gx = g x
when (fx /= gx) $ do print x
print (decodeFloat x)
print fx
print gx
print (fx - gx)
foreign import ccall "wrapper" wrapId :: (CDouble -> CDouble) -> IO (FunPtr (CDouble -> CDouble))
foreign import ccall "dynamic" dyn_sin :: FunPtr (CDouble -> CDouble) -> (CDouble -> CDouble)
$ ghc w.hs -o w -fvia-c -O; ./w
0.4400000000000002
(7926335344172077,-54)
0.42593946506599983
0.4259394650659998
5.551115123125783e-17
optasm:
{-# LANGUAGE ForeignFunctionInterface #-}
import Control.Monad
import Foreign
import Foreign.C
main :: IO ()
main = do sin_addr <- wrapId sin
doit sin (dyn_sin sin_addr) (encodeFloat 7926335344172077 (-54))
freeHaskellFunPtr sin_addr
doit :: (CDouble -> CDouble) -> (CDouble -> CDouble) -> CDouble -> IO ()
doit f g x = do let fx = f x
gx = g x
when (fx /= gx) $ do print x
print (decodeFloat x)
print fx
print gx
print (decodeFloat fx)
print (decodeFloat gx)
print (fx == gx)
print (decodeFloat fx == decodeFloat gx)
print (fx - gx)
foreign import ccall "wrapper" wrapId :: (CDouble -> CDouble) -> IO (FunPtr (CDouble -> CDouble))
foreign import ccall "dynamic" dyn_sin :: FunPtr (CDouble -> CDouble) -> (CDouble -> CDouble)
$ ghc r.hs -o r -O; ./r
0.4400000000000002
(7926335344172077,-54)
0.4259394650659998
0.4259394650659998
(7673043264614500,-54)
(7673043264614500,-54)
False
True
0.0
Trac metadata
Trac field | Value |
---|---|
Version | 6.12.2 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | ffi005 |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |