diff options
-rw-r--r-- | compiler/main/DynFlags.hs | 11 | ||||
-rw-r--r-- | compiler/main/HscTypes.hs | 29 | ||||
-rw-r--r-- | testsuite/tests/driver/dynamicToo/dynamicToo006/Main.hs | 1 | ||||
-rw-r--r-- | testsuite/tests/driver/dynamicToo/dynamicToo006/Makefile | 16 | ||||
-rw-r--r-- | testsuite/tests/driver/dynamicToo/dynamicToo006/all.T | 2 | ||||
-rw-r--r-- | testsuite/tests/driver/dynamicToo/dynamicToo006/dynamicToo006.stdout | 2 | ||||
-rw-r--r-- | testsuite/tests/safeHaskell/safeInfered/UnsafeInfered02.stderr | 4 |
7 files changed, 51 insertions, 14 deletions
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs index dc12879776..786deccf3c 100644 --- a/compiler/main/DynFlags.hs +++ b/compiler/main/DynFlags.hs @@ -41,6 +41,7 @@ module DynFlags ( whenGeneratingDynamicToo, ifGeneratingDynamicToo, whenCannotGenerateDynamicToo, dynamicTooMkDynamicDynFlags, + dynamicOutputFile, DynFlags(..), FlagSpec(..), HasDynFlags(..), ContainsDynFlags(..), @@ -1823,6 +1824,12 @@ dynamicTooMkDynamicDynFlags dflags0 dflags4 = gopt_unset dflags3 Opt_BuildDynamicToo in dflags4 +-- | Compute the path of the dynamic object corresponding to an object file. +dynamicOutputFile :: DynFlags -> FilePath -> FilePath +dynamicOutputFile dflags outputFile = dynOut outputFile + where + dynOut = flip addExtension (dynObjectSuf dflags) . dropExtension + ----------------------------------------------------------------------------- -- | Used by 'GHC.runGhc' to partially initialize a new 'DynFlags' value @@ -2772,11 +2779,11 @@ parseDynamicFlagsFull activeFlags cmdline dflags0 args = do let chooseOutput | isJust (outputFile dflags3) -- Only iff user specified -o ... , not (isJust (dynOutputFile dflags3)) -- but not -dyno - = return $ dflags3 { dynOutputFile = Just $ dynOut (fromJust $ outputFile dflags3) } + = return $ dflags3 { dynOutputFile = Just $ dynamicOutputFile dflags3 outFile } | otherwise = return dflags3 where - dynOut = flip addExtension (dynObjectSuf dflags3) . dropExtension + outFile = fromJust $ outputFile dflags3 dflags4 <- ifGeneratingDynamicToo dflags3 chooseOutput (return dflags3) let (dflags5, consistency_warnings) = makeDynFlagsConsistent dflags4 diff --git a/compiler/main/HscTypes.hs b/compiler/main/HscTypes.hs index f4306f3d16..8c41f9b9fc 100644 --- a/compiler/main/HscTypes.hs +++ b/compiler/main/HscTypes.hs @@ -2805,6 +2805,9 @@ msHsFilePath ms = expectJust "msHsFilePath" (ml_hs_file (ms_location ms)) msHiFilePath ms = ml_hi_file (ms_location ms) msObjFilePath ms = ml_obj_file (ms_location ms) +msDynObjFilePath :: ModSummary -> DynFlags -> FilePath +msDynObjFilePath ms dflags = dynamicOutputFile dflags (msObjFilePath ms) + -- | Did this 'ModSummary' originate from a hs-boot file? isBootSummary :: ModSummary -> Bool isBootSummary ms = ms_hsc_src ms == HsBootFile @@ -2824,20 +2827,26 @@ showModMsg :: DynFlags -> HscTarget -> Bool -> ModSummary -> String showModMsg dflags target recomp mod_summary = showSDoc dflags $ if gopt Opt_HideSourcePaths dflags then text mod_str - else hsep + else hsep $ [ text (mod_str ++ replicate (max 0 (16 - length mod_str)) ' ') , char '(' , text (op $ msHsFilePath mod_summary) <> char ',' - , case target of - HscInterpreted | recomp -> text "interpreted" - HscNothing -> text "nothing" - _ -> text (op $ msObjFilePath mod_summary) - , char ')' - ] + ] ++ + if gopt Opt_BuildDynamicToo dflags + then [ text obj_file <> char ',' + , text dyn_file + , char ')' + ] + else [ text obj_file, char ')' ] where - op = normalise - mod = moduleName (ms_mod mod_summary) - mod_str = showPpr dflags mod ++ hscSourceString (ms_hsc_src mod_summary) + op = normalise + mod = moduleName (ms_mod mod_summary) + mod_str = showPpr dflags mod ++ hscSourceString (ms_hsc_src mod_summary) + dyn_file = op $ msDynObjFilePath mod_summary dflags + obj_file = case target of + HscInterpreted | recomp -> "interpreted" + HscNothing -> "nothing" + _ -> (op $ msObjFilePath mod_summary) {- ************************************************************************ diff --git a/testsuite/tests/driver/dynamicToo/dynamicToo006/Main.hs b/testsuite/tests/driver/dynamicToo/dynamicToo006/Main.hs new file mode 100644 index 0000000000..aab8d3ce7a --- /dev/null +++ b/testsuite/tests/driver/dynamicToo/dynamicToo006/Main.hs @@ -0,0 +1 @@ +main = print "a" diff --git a/testsuite/tests/driver/dynamicToo/dynamicToo006/Makefile b/testsuite/tests/driver/dynamicToo/dynamicToo006/Makefile new file mode 100644 index 0000000000..b78fc4aa8f --- /dev/null +++ b/testsuite/tests/driver/dynamicToo/dynamicToo006/Makefile @@ -0,0 +1,16 @@ +TOP=../../.. +include $(TOP)/mk/boilerplate.mk +include $(TOP)/mk/test.mk + +clean: + rm -f *.o + rm -f *.hi + rm -f Main + +# check that the compilation progress message will contain +# *.dyn_o file with -dynamic-too +main: + rm -f *.o + rm -f *.hi + rm -f Main + '$(TEST_HC)' $(TEST_HC_OPTS) -dynamic-too Main.hs diff --git a/testsuite/tests/driver/dynamicToo/dynamicToo006/all.T b/testsuite/tests/driver/dynamicToo/dynamicToo006/all.T new file mode 100644 index 0000000000..c9e1b52f4e --- /dev/null +++ b/testsuite/tests/driver/dynamicToo/dynamicToo006/all.T @@ -0,0 +1,2 @@ +test('dynamicToo006', [normalise_slashes, extra_files(['Main.hs'])], + run_command, ['$MAKE -s main --no-print-director']) diff --git a/testsuite/tests/driver/dynamicToo/dynamicToo006/dynamicToo006.stdout b/testsuite/tests/driver/dynamicToo/dynamicToo006/dynamicToo006.stdout new file mode 100644 index 0000000000..5c33cb2e7a --- /dev/null +++ b/testsuite/tests/driver/dynamicToo/dynamicToo006/dynamicToo006.stdout @@ -0,0 +1,2 @@ +[1 of 1] Compiling Main ( Main.hs, Main.o, Main.dyn_o ) +Linking Main ... diff --git a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered02.stderr b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered02.stderr index c76996f5b8..e5593d57e9 100644 --- a/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered02.stderr +++ b/testsuite/tests/safeHaskell/safeInfered/UnsafeInfered02.stderr @@ -1,5 +1,5 @@ -[1 of 2] Compiling UnsafeInfered02_A ( UnsafeInfered02_A.hs, UnsafeInfered02_A.o ) -[2 of 2] Compiling UnsafeInfered02 ( UnsafeInfered02.hs, UnsafeInfered02.o ) +[1 of 2] Compiling UnsafeInfered02_A ( UnsafeInfered02_A.hs, UnsafeInfered02_A.o, UnsafeInfered02_A.dyn_o ) +[2 of 2] Compiling UnsafeInfered02 ( UnsafeInfered02.hs, UnsafeInfered02.o, UnsafeInfered02.dyn_o ) UnsafeInfered02.hs:4:1: error: UnsafeInfered02_A: Can't be safely imported! |