diff options
author | Matthew Pickering <matthewtpickering@gmail.com> | 2021-06-29 12:02:47 +0100 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2021-07-19 19:37:12 -0400 |
commit | 952ba18e596f406d08003a9ff07f95a5a94a2ede (patch) | |
tree | bdccdc0843b2e9d58f6eccc57fc2b4618d029451 /compiler/GHC/Linker | |
parent | e5a4cfa51899e67db8fb17409660107b821d252d (diff) | |
download | haskell-952ba18e596f406d08003a9ff07f95a5a94a2ede.tar.gz |
th: Weaken return type of myCoreToStgExpr
The previous code assumed properties of the CoreToStg translation,
namely that a core let expression which be translated to a single
non-recursive top-level STG binding. This assumption was false, as
evidenced by #20060.
The consequence of this was the need to modify the call sites of
`myCoreToStgExpr`, the main one being in hscCompileCoreExpr', which
the meant we had to use byteCodeGen instead of stgExprToBCOs to convert
the returned value to bytecode.
I removed the `stgExprToBCOs` function as it is no longer
used in the compiler.
There is still some partiallity with this patch (the lookup in
hscCompileCoreExpr') but this should be more robust that before.
Fixes #20060
Diffstat (limited to 'compiler/GHC/Linker')
-rw-r--r-- | compiler/GHC/Linker/Loader.hs | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/compiler/GHC/Linker/Loader.hs b/compiler/GHC/Linker/Loader.hs index 1b1fca8b17..832d2b0cfd 100644 --- a/compiler/GHC/Linker/Loader.hs +++ b/compiler/GHC/Linker/Loader.hs @@ -797,13 +797,13 @@ getLinkDeps hsc_env hpt pls replace_osuf span mods ********************************************************************* -} -loadDecls :: Interp -> HscEnv -> (SrcSpan, Maybe ModuleNameWithIsBoot) -> CompiledByteCode -> IO () +loadDecls :: Interp -> HscEnv -> (SrcSpan, Maybe ModuleNameWithIsBoot) -> CompiledByteCode -> IO [(Name, ForeignHValue)] loadDecls interp hsc_env span cbc@CompiledByteCode{..} = do -- Initialise the linker (if it's not been done already) initLoaderState interp hsc_env -- Take lock for the actual work. - modifyLoaderState_ interp $ \pls0 -> do + modifyLoaderState interp $ \pls0 -> do -- Link the packages and modules required (pls, ok) <- loadDependencies interp hsc_env pls0 span needed_mods if failed ok @@ -819,7 +819,7 @@ loadDecls interp hsc_env span cbc@CompiledByteCode{..} = do nms_fhvs <- makeForeignNamedHValueRefs interp new_bindings let pls2 = pls { closure_env = extendClosureEnv ce nms_fhvs , itbl_env = ie } - return pls2 + return (pls2, nms_fhvs) where free_names = uniqDSetToList $ foldr (unionUniqDSets . bcoFreeNames) emptyUniqDSet bc_bcos |