Repository : ssh://darcs.haskell.org//srv/darcs/testsuite

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/fd681c4ff2f82c7d40ed09ec6dd8d39577ab9f24

>---------------------------------------------------------------

commit fd681c4ff2f82c7d40ed09ec6dd8d39577ab9f24
Author: Simon Marlow <marlo...@gmail.com>
Date:   Fri Dec 7 12:08:28 2012 +0000

    add test for #7478

>---------------------------------------------------------------

 tests/ghc-api/T7478/A.hs         |    6 ++++
 tests/ghc-api/T7478/B.hs         |    4 ++
 tests/ghc-api/T7478/C.hs         |    4 ++
 tests/ghc-api/T7478/Makefile     |   11 +++++++
 tests/ghc-api/T7478/T7478.hs     |   61 ++++++++++++++++++++++++++++++++++++++
 tests/ghc-api/T7478/T7478.stdout |    8 +++++
 tests/ghc-api/T7478/all.T        |    2 +
 7 files changed, 96 insertions(+), 0 deletions(-)

diff --git a/tests/ghc-api/T7478/A.hs b/tests/ghc-api/T7478/A.hs
new file mode 100644
index 0000000..bea1b1a
--- /dev/null
+++ b/tests/ghc-api/T7478/A.hs
@@ -0,0 +1,6 @@
+module Main where
+
+import B
+
+main :: IO ()
+main = B.b >> 42
diff --git a/tests/ghc-api/T7478/B.hs b/tests/ghc-api/T7478/B.hs
new file mode 100644
index 0000000..2c71d18
--- /dev/null
+++ b/tests/ghc-api/T7478/B.hs
@@ -0,0 +1,4 @@
+module B where
+
+b :: IO ()
+b = return ()
diff --git a/tests/ghc-api/T7478/C.hs b/tests/ghc-api/T7478/C.hs
new file mode 100644
index 0000000..d82a4bd
--- /dev/null
+++ b/tests/ghc-api/T7478/C.hs
@@ -0,0 +1,4 @@
+module Main where
+
+main :: IO ()
+main = return ()
diff --git a/tests/ghc-api/T7478/Makefile b/tests/ghc-api/T7478/Makefile
new file mode 100644
index 0000000..1afb16d
--- /dev/null
+++ b/tests/ghc-api/T7478/Makefile
@@ -0,0 +1,11 @@
+TOP=../../..
+include $(TOP)/mk/boilerplate.mk
+include $(TOP)/mk/test.mk
+
+clean:
+       rm -f *.o *.hi
+
+T7478: clean
+       '$(TEST_HC)' $(TEST_HC_OPTS) --make -v0 -package ghc T7478.hs
+       ./T7478 "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`"
+
diff --git a/tests/ghc-api/T7478/T7478.hs b/tests/ghc-api/T7478/T7478.hs
new file mode 100644
index 0000000..15c3559
--- /dev/null
+++ b/tests/ghc-api/T7478/T7478.hs
@@ -0,0 +1,61 @@
+{-# LANGUAGE NamedFieldPuns #-}
+module Main (main) where
+
+import Data.List ((\\))
+import Control.Monad (void)
+import System.Environment
+
+import GHC
+import qualified Config as GHC
+import qualified Outputable as GHC
+import GhcMonad (liftIO)
+import Outputable (PprStyle, qualName, qualModule)
+
+compileInGhc :: [FilePath]          -- ^ Targets
+             -> (String -> IO ())   -- ^ handler for each SevOutput message
+             -> Ghc ()
+compileInGhc targets handlerOutput = do
+    -- Set flags
+    flags0 <- getSessionDynFlags
+    let flags = flags0 {verbosity = 1, log_action = collectSrcError 
handlerOutput}
+    setSessionDynFlags flags
+    -- Set up targets.
+    oldTargets <- getTargets
+    let oldFiles = map fileFromTarget oldTargets
+    mapM_ addSingle (targets \\ oldFiles)
+    mapM_ (removeTarget . targetIdFromFile) $ oldFiles \\ targets
+    -- Load modules to typecheck
+    void $ load LoadAllTargets
+  where
+    targetIdFromFile file = TargetFile file Nothing
+
+    addSingle filename =
+      addTarget Target
+        { targetId           = targetIdFromFile filename
+        , targetAllowObjCode = True
+        , targetContents     = Nothing
+        }
+
+    fileFromTarget Target{targetId} =
+      case targetId of
+        TargetFile file Nothing -> file
+        _ -> error "fileFromTarget: not a known target"
+
+    collectSrcError handlerOutput flags SevOutput _srcspan style msg
+      = handlerOutput $ GHC.showSDocForUser flags (qualName style,qualModule 
style) msg
+    collectSrcError _ _ _ _ _ _
+      = return ()
+
+main :: IO ()
+main = do
+  [libdir] <- getArgs
+  runGhc (Just libdir) $ do
+
+  liftIO $ putStrLn "----- 0 ------"
+  compileInGhc ["A.hs", "B.hs"] $ \msg -> print (0 :: Int, msg)
+
+  liftIO $ putStrLn "----- 1 ------"
+  compileInGhc ["A.hs", "B.hs"] $ \msg -> print (1 :: Int, msg)
+
+  liftIO $ putStrLn "----- 2 ------"
+  compileInGhc ["C.hs"] $ \msg -> print (2 :: Int, msg)
diff --git a/tests/ghc-api/T7478/T7478.stdout b/tests/ghc-api/T7478/T7478.stdout
new file mode 100644
index 0000000..372cf9b
--- /dev/null
+++ b/tests/ghc-api/T7478/T7478.stdout
@@ -0,0 +1,8 @@
+----- 0 ------
+(0,"[1 of 2] Compiling B                ( B.hs, B.o )")
+(0,"[2 of 2] Compiling Main             ( A.hs, A.o )")
+----- 1 ------
+(1,"[2 of 2] Compiling Main             ( A.hs, A.o )")
+----- 2 ------
+(2,"[1 of 1] Compiling Main             ( C.hs, C.o )")
+(2,"Linking A ...")
diff --git a/tests/ghc-api/T7478/all.T b/tests/ghc-api/T7478/all.T
new file mode 100644
index 0000000..5ba40f0
--- /dev/null
+++ b/tests/ghc-api/T7478/all.T
@@ -0,0 +1,2 @@
+test('T7478', extra_clean(['A','A.exe','B.o','B.hi','C.o','C.hi']), 
run_command, ['$MAKE -s --no-print-directory T7478'])
+



_______________________________________________
Cvs-ghc mailing list
Cvs-ghc@haskell.org
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to