crash caused by generic visitor (?)
Ranjit Jhala
jhala at cs.ucsd.edu
Sat May 14 18:52:06 CEST 2011
Hi all,
my apologies. Looks like the issue (and a fix!) is described here
http://mistuke.wordpress.com/category/vsx/
Thanks,
Ranjit.
On May 13, 2011, at 4:34 PM, Ranjit Jhala wrote:
> Hi all,
>
> I'm trying to extract the set of identifiers that are read in given
> source file. To this end, I wrote the following code (full source at end.)
>
> ------------------------------------------------------------------------
> main
> = do fname <- (!! 0) `fmap` getArgs
> tcm <- loadTypecheckedSource fname
> putStrLn $ showPpr tcm -- this works fine
> putStrLn $ showPpr $ allIds tcm -- this causes the crash
> return ()
>
> allIds :: Data a => a -> [Id]
> allIds = listify (\x -> case (x :: Id) of _ -> True)
> ------------------------------------------------------------------------
>
> and where:
>
> loadTypecheckedSource :: FilePath -> IO TypecheckedSource
>
> unfortunately, when I compile and run it, I get the dreaded:
>
> Bug: Bug: panic! (the 'impossible' happened)
> (GHC version 7.0.3 for i386-unknown-linux):
> placeHolderNames
>
> Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
>
> Turns out that the problem is when the file contains a type annotation.
> That is,
>
> ./Bug Test00.hs
>
> crashes, when Test00.hs is:
>
> module Test where
>
> x :: Int
> x = 0
>
> but does not crash when the file is:
>
> module Test where
>
> x = 0
>
> Can anyone tell me why listify chokes in the latter case? (And how one might
> get around the problem?) I include the full source below (compiled with: ghc --make Bug, using ghc 7.0.3)
>
> Thanks!
>
> Ranjit.
>
> ------------------------------------------------------------------------------------------------------
> import GHC
> import Outputable
> import DynFlags (defaultDynFlags)
> import GHC.Paths (libdir)
>
> import System.Environment (getArgs)
> import Control.Monad
> import qualified Data.List as L
> import Data.Data
> import Data.Generics.Schemes (listify)
>
> main
> = do fname <- (!! 0) `fmap` getArgs
> tcm <- loadTypecheckedSource fname
> putStrLn $ showPpr tcm -- this works fine
> putStrLn $ showPpr $ allIds tcm -- this causes the crash
> return ()
>
> allIds :: Data a => a -> [Id]
> allIds = listify (\x -> case (x :: Id) of _ -> True)
>
> loadTypecheckedSource :: FilePath -> IO TypecheckedSource
> loadTypecheckedSource fname
> = defaultErrorHandler defaultDynFlags $
> runGhc (Just libdir) $ do
> df <- getSessionDynFlags
> setSessionDynFlags df
> tgt <- guessTarget fname Nothing
> setTargets [tgt]
> load LoadAllTargets
> res <- load LoadAllTargets
> if failed res
> then pprPanic "Load Failed!!" (text "AAARGH!")
> else tm_typechecked_source `fmap` getTypecheckedModule fname
>
> findModSummary :: GhcMonad m => FilePath -> m ModSummary
> findModSummary fname
> = do msums <- depanal [] False
> case L.find ((fname ==) . ms_hspp_file) msums of
> Just msum -> return msum
> Nothing -> pprPanic "ModuleName Lookup Failed!!" (text "AARGHC!")
>
> getTypecheckedModule :: GhcMonad m => FilePath -> m TypecheckedModule
> getTypecheckedModule = findModSummary >=> parseModule >=> typecheckModule
>
>
>
More information about the Glasgow-haskell-users
mailing list