#5570: ($) of an unboxed double appears to be treated as 0.0
-------------------------------+--------------------------------------------
Reporter: manzyuk | Owner:
Type: bug | Status: new
Priority: normal | Component: Compiler
Version: 7.0.3 | Keywords:
Testcase: | Blockedby:
Os: Linux | Blocking:
Architecture: x86_64 (amd64) | Failure: Incorrect result at runtime
-------------------------------+--------------------------------------------
The following program compiles cleanly with GHC 7.0.3 running on a 64 bit
Linux machine, but produces the wrong answer:
{{{
$ uname -a
Linux pandora 2.6.32-5-amd64 #1 SMP Fri Sep 9 20:23:16 UTC 2011 x86_64
GNU/Linux
$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.0.3
$ cat bug.hs
{-# LANGUAGE MagicHash #-}
import GHC.Exts
main :: IO ()
main = print $ D# $ 3.0##
$ ghc -Wall bug.hs
[1 of 1] Compiling Main ( bug.hs, bug.o )
Linking bug ...
$ ./bug
0.0
}}}
The expected behavior was to either produce a compile-time error message
or to output 3.0.
Compiling this program on the same machine with `-dcore-lint` produces:
{{{
$ ghc bug.hs -dcore-lint
[1 of 1] Compiling Main ( bug.hs, bug.o )
*** Core Lint errors : in result of Desugar ***
<no location info>:
In the expression: GHC.Base.$ @ GHC.Prim.Double#
Kinds don't match in type application:
Type variable: a_ahX :: *
Arg type: GHC.Prim.Double# :: #
*** Offending Program ***
Main.main :: GHC.Types.IO ()
[LclIdX]
Main.main =
GHC.Base.$
@ GHC.Types.Double
@ (GHC.Types.IO ())
(System.IO.print @ GHC.Types.Double GHC.Float.$fShowDouble)
(GHC.Base.$ @ GHC.Prim.Double# @ GHC.Types.Double GHC.Types.D# 3.0)
:Main.main :: GHC.Types.IO ()
[LclIdX]
:Main.main = GHC.TopHandler.runMainIO @ () Main.main
*** End of Offense ***
<no location info>:
Compilation had errors
}}}
Compiling the program with GHC 6.12.1 on a different machine running 32
bit Linux fails with the following perfectly reasonable error message:
{{{
$ uname -a
Linux golconda 2.6.32-5-686 #1 SMP Mon Jun 13 04:13:06 UTC 2011 i686
GNU/Linux
$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 6.12.1
$ ghc bug.hs
bug.hs:6:15:
Couldn't match kind `#' against `*'
When matching the kinds of `Double# :: #' and `a :: *'
Expected type: a
Inferred type: Double#
In the first argument of `($)', namely `D#'
}}}
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/5570>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs