[GHC] #8641: ghc with -odir and -prof (or any stub file) does not create the specified output directory

GHC ghc-devs at haskell.org
Fri Apr 11 01:28:53 UTC 2014


#8641: ghc with -odir and -prof (or any stub file) does not create the specified
output directory
---------------------------------------+-----------------------------------
        Reporter:  wmarshall           |            Owner:  ezyang
            Type:  bug                 |           Status:  new
        Priority:  normal              |        Milestone:
       Component:  Compiler            |          Version:  7.9
      Resolution:                      |         Keywords:
Operating System:  Unknown/Multiple    |     Architecture:
 Type of failure:  Compile-time crash  |  Unknown/Multiple
       Test Case:                      |       Difficulty:  Unknown
        Blocking:                      |       Blocked By:
                                       |  Related Tickets:
---------------------------------------+-----------------------------------

Comment (by ezyang):

 {{{
 From c7498bbdaa74dadd976c75c4e303c2050aa78277 Mon Sep 17 00:00:00 2001
 From: "Edward Z. Yang" <ezyang at cs.stanford.edu>
 Date: Thu, 10 Apr 2014 18:28:11 -0700
 Subject: [PATCH] Fix #8641, creating directories when we have stubs.

 Signed-off-by: Edward Z. Yang <ezyang at cs.stanford.edu>
 ---
  compiler/main/DriverPipeline.hs      | 2 ++
  testsuite/tests/driver/B042stub/C.hs | 6 ++++++
  testsuite/tests/driver/Makefile      | 8 ++++++++
  testsuite/tests/driver/all.T         | 5 +++++
  4 files changed, 21 insertions(+)
  create mode 100644 testsuite/tests/driver/B042stub/C.hs

 diff --git a/compiler/main/DriverPipeline.hs
 b/compiler/main/DriverPipeline.hs
 index 2c71967..2816c94 100644
 --- a/compiler/main/DriverPipeline.hs
 +++ b/compiler/main/DriverPipeline.hs
 @@ -1259,6 +1259,7 @@ runPhase (RealPhase SplitAs) _input_fn dflags
              osuf = objectSuf dflags
              split_odir  = base_o ++ "_" ++ osuf ++ "_split"

 +        -- this also creates the hierarchy
          liftIO $ createDirectoryIfMissing True split_odir

          -- remove M_split/ *.o, because we're going to archive M_split/
 *.o
 @@ -1469,6 +1470,7 @@ runPhase (RealPhase MergeStub) input_fn dflags
   = do
       PipeState{maybe_stub_o} <- getPipeState
       output_fn <- phaseOutputFilename StopLn
 +     liftIO $ createDirectoryIfMissing True (takeDirectory output_fn)
       case maybe_stub_o of
         Nothing ->
           panic "runPhase(MergeStub): no stub"
 diff --git a/testsuite/tests/driver/B042stub/C.hs
 b/testsuite/tests/driver/B042stub/C.hs
 new file mode 100644
 index 0000000..73f069c
 --- /dev/null
 +++ b/testsuite/tests/driver/B042stub/C.hs
 @@ -0,0 +1,6 @@
 +{-# LANGUAGE ForeignFunctionInterface #-}
 +module B042stub.C where
 +
 +foreign export ccall foo :: IO ()
 +foo :: IO ()
 +foo = return ()
 diff --git a/testsuite/tests/driver/Makefile
 b/testsuite/tests/driver/Makefile
 index 7673713..3603bb6 100644
 --- a/testsuite/tests/driver/Makefile
 +++ b/testsuite/tests/driver/Makefile
 @@ -222,6 +222,14 @@ test042:
         "$(TEST_HC)" $(TEST_HC_OPTS_NO_RECOMP) -v0 --make B042/C.hs -odir
 obj042
         test -f obj042/B042/C$(OBJSUFFIX)

 +# test -odir with stubs
 +test042stub:
 +       $(RM) -rf obj042stub
 +       mkdir obj042stub
 +       $(RM) B042stub/C.hi
 +       "$(TEST_HC)" $(TEST_HC_OPTS_NO_RECOMP) -v0 --make B042stub/C.hs
 -odir obj042stub
 +       test -f obj042stub/B042stub/C$(OBJSUFFIX)
 +
  # test -hidir
  test043:
         $(RM) -f B043/C$(OBJSUFFIX)
 diff --git a/testsuite/tests/driver/all.T b/testsuite/tests/driver/all.T
 index aa4bc9b..ed0ce0f 100644
 --- a/testsuite/tests/driver/all.T
 +++ b/testsuite/tests/driver/all.T
 @@ -142,6 +142,11 @@ test('driver042',
       run_command,
       ['$MAKE -s --no-print-directory test042'])

 +test('driver042stub',
 +     extra_clean(['B042stub/C.hi', 'obj042stub/B042stub/C.o',
 'obj042stub/B042stub/', 'obj042stub/']),
 +     run_command,
 +     ['$MAKE -s --no-print-directory test042stub'])
 +
  test('driver043',
       extra_clean(['B043/C.hi', 'B043/C.o',
                    'hi043/B043/C.hi', 'hi043/B043', 'hi043']),
 --
 1.8.3.2


 }}}

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8641#comment:4>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list