panic parsing a stmt in ghc 7 (possible regression?)
Simon Peyton-Jones
simonpj at microsoft.com
Tue Feb 1 10:53:40 CET 2011
A panic is always a bug. Thanks for the test case. I've created a ticket http://hackage.haskell.org/trac/ghc/ticket/4939
Simon
| -----Original Message-----
| From: glasgow-haskell-users-bounces at haskell.org [mailto:glasgow-haskell-
| users-bounces at haskell.org] On Behalf Of Daniel Gorín
| Sent: 31 January 2011 21:56
| To: glasgow-haskell-users
| Subject: panic parsing a stmt in ghc 7 (possible regression?)
|
| Hi
|
| I'm trying to make the hint library work also with ghc 7 and I'm having
| problems with some test-cases that are now raising exceptions. I've been able
| to reduce the problem to a small example. The program below runs ghc in
| interpreter-mode and attempts to parse an statement using ghc's parseStmt
| function; the particular statement is a let-expression with a \n in the
| middle. The observed behaviour is:
|
| > $ ghc-6.12.1 -fforce-recomp --make -package ghc -cpp -Wall d.hs && ./d
| > [1 of 1] Compiling Main ( d.hs, d.o )
| > Linking d ...
| > let {e = let x = ()
| > in x ;} in e
| > Ok
| > $ ghc-7.0.1 -fforce-recomp --make -package ghc -cpp -Wall d.hs && ./d
| > [1 of 1] Compiling Main ( d.hs, d.o )
| > Linking d ...
| > let {e = let x = ()
| > in x ;} in e
| > d: d: panic! (the 'impossible' happened)
| > (GHC version 7.0.1 for i386-apple-darwin):
| > srcLocCol <no location info>
| >
| > Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
|
| Is it a regression or should I be doing this some other way?
|
| Thanks,
| Daniel
|
| -- d.hs
| import qualified GHC
| import qualified MonadUtils as GHC ( liftIO )
| import qualified StringBuffer as GHC
| import qualified Lexer as GHC
| import qualified Parser as GHC
| import qualified GHC.Paths
|
| main :: IO ()
| main = GHC.runGhcT (Just GHC.Paths.libdir) $ do
| -- initialize
| df0 <- GHC.getSessionDynFlags
| _ <- GHC.setSessionDynFlags df0{GHC.ghcMode = GHC.CompManager,
| GHC.hscTarget = GHC.HscInterpreted,
| GHC.ghcLink = GHC.LinkInMemory,
| GHC.verbosity = 0}
| df1 <- GHC.getSessionDynFlags
| -- runParser
| let expr = "let {e = let x = ()\nin x ;} in e"
| GHC.liftIO $ putStrLn expr
| buf <- GHC.liftIO $ GHC.stringToStringBuffer expr
| let p_res = GHC.unP GHC.parseStmt (mkPState df1 buf GHC.noSrcLoc)
| case p_res of
| GHC.POk{} -> GHC.liftIO $ putStrLn "Ok"
| GHC.PFailed{} -> GHC.liftIO $ putStrLn "Failed"
| where
| #if __GLASGOW_HASKELL__ >= 700
| mkPState = GHC.mkPState
| #else
| mkPState = \a b c -> GHC.mkPState b c a
| #endif
|
|
| _______________________________________________
| Glasgow-haskell-users mailing list
| Glasgow-haskell-users at haskell.org
| http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
More information about the Glasgow-haskell-users
mailing list