[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