[GHC] #14624: HEAD panic in ghc:DsForeign: toCType
GHC
ghc-devs at haskell.org
Mon Jan 1 23:38:05 UTC 2018
#14624: HEAD panic in ghc:DsForeign: toCType
-------------------------------------+-------------------------------------
Reporter: tianxiaogu | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.2.2
Keywords: | Operating System: Linux
Architecture: x86_64 | Type of failure: Compile-time
(amd64) | crash or panic
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
The following program crashes in 8.2.2 and HEAD (8.5.20171228).
{{{#!hs
{-# LANGUAGE ForeignFunctionInterface, CApiFFI, GHCForeignImportPrim,
QuasiQuotes, TemplateHaskell, JavaScriptFFI, MagicHash,
UnliftedFFITypes #-}
module TH_foreignCallingConventions where
import GHC.Prim
import Control.Applicative
import Language.Haskell.TH
import System.IO
import Foreign.Ptr
$( do let fi cconv safety lbl name ty =
ForeignD (ImportF cconv safety lbl name ty)
dec1 <- fi CCall Interruptible "&" (mkName "foo") <$> [t| Ptr
() |]
dec2 <- fi CApi Safe "bar" (mkName "bar") <$> [t|
Int# -> Int# |]
-- the declarations below would result in warnings or errors when
returned
dec3 <- fi CApi Unsafe "baz" (mkName "baz") <$> [t|
Double -> IO () |]
dec4 <- fi StdCall Safe "bay" (mkName "bay") <$> [t|
(Int -> Bool) -> IO Int |]
dec5 <- fi JavaScript Unsafe "bax" (mkName "bax") <$> [t| Ptr
Int -> IO String |]
runIO $
mapM_ (putStrLn . pprint) [dec1, dec2, dec3, dec4, dec5] >> hFlush
stdout
return [dec1, dec2]
)
}}}
This program is derived by mutating test TH_foreignCallingConventions.hs.
{{{#!diff
diff --git a/testsuite/tests/th/TH_foreignCallingConventions.hs
b/testsuite/tests/th/TH_foreignCallingConventions.hs
index ee39510..16789af 100644
--- a/testsuite/tests/th/TH_foreignCallingConventions.hs
+++ b/testsuite/tests/th/TH_foreignCallingConventions.hs
@@ -13,7 +13,7 @@ import Foreign.Ptr
$( do let fi cconv safety lbl name ty =
ForeignD (ImportF cconv safety lbl name ty)
dec1 <- fi CCall Interruptible "&" (mkName "foo") <$> [t|
Ptr () |]
- dec2 <- fi Prim Safe "bar" (mkName "bar") <$> [t|
Int# -> Int# |]
+ dec2 <- fi CApi Safe "bar" (mkName "bar") <$> [t|
Int# -> Int# |]
-- the declarations below would result in warnings or errors when
returned
dec3 <- fi CApi Unsafe "baz" (mkName "baz") <$> [t|
Double -> IO () |]
dec4 <- fi StdCall Safe "bay" (mkName "bay") <$> [t|
(Int -> Bool) -> IO Int |]
}}}
Log:
{{{
foreign import capi safe "bar" bar :: GHC.Prim.Int# ->
GHC.Prim.Int#
foreign import capi unsafe "baz" baz :: GHC.Types.Double ->
GHC.Types.IO ()
foreign import stdcall safe "bay" bay :: (GHC.Types.Int ->
GHC.Types.Bool) ->
GHC.Types.IO GHC.Types.Int
foreign import javascript unsafe "bax" bax :: GHC.Ptr.Ptr GHC.Types.Int ->
GHC.Types.IO GHC.Base.String
ghc: panic! (the 'impossible' happened)
(GHC version 8.5.20171228 for x86_64-unknown-linux):
toCType
Int#
Call stack:
CallStack (from HasCallStack):
callStackDoc, called at compiler/utils/Outputable.hs:1150:37 in
ghc:Outputable
pprPanic, called at compiler/deSugar/DsForeign.hs:730:17 in
ghc:DsForeign
Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14624>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list