Commit f1934472 authored by simonpj@microsoft.com's avatar simonpj@microsoft.com
Browse files

Fix Trac #4003: fix the knot-tying in checkHiBootIface

I had incorrectly "optimised" checkHiBootIface so that it forgot
to update the "knot-tied" type environment. 

This patch fixes the HEAD
parent f3c7ab8d
......@@ -480,13 +480,6 @@ $(eval $(call compiler-hs-dependency,PrimOp,$(PRIMOP_BITS)))
compiler/prelude/PrimOps_HC_OPTS += -fforce-recomp
compiler/main/Constants_HC_OPTS += -fforce-recomp
# Workaround for #4003 in GHC 6.12.2. It didn't happen in 6.12.1, and
# will be fixed in 6.12.3. Unfortunately we don't have a way to do
# this for just stage1 in the build system.
ifeq "$(GhcVersion)" "6.12.2"
compiler/hsSyn/HsLit_HC_OPTS += -fomit-interface-pragmas
endif
# Note [munge-stage1-package-config]
# Strip the date/patchlevel from the version of stage1. See Note
# [fiddle-stage1-version] above.
......
......@@ -566,15 +566,19 @@ checkHiBootIface
-- Check instance declarations
; mb_dfun_prs <- mapM check_inst boot_insts
; let tcg_env' = tcg_env { tcg_binds = binds `unionBags` dfun_binds,
tcg_type_env = extendTypeEnvWithIds local_type_env boot_dfuns }
dfun_prs = catMaybes mb_dfun_prs
boot_dfuns = map fst dfun_prs
dfun_binds = listToBag [ mkVarBind boot_dfun (nlHsVar dfun)
| (boot_dfun, dfun) <- dfun_prs ]
; let dfun_prs = catMaybes mb_dfun_prs
boot_dfuns = map fst dfun_prs
dfun_binds = listToBag [ mkVarBind boot_dfun (nlHsVar dfun)
| (boot_dfun, dfun) <- dfun_prs ]
type_env' = extendTypeEnvWithIds local_type_env boot_dfuns
tcg_env' = tcg_env { tcg_binds = binds `unionBags` dfun_binds }
; failIfErrsM
; return tcg_env' }
; setGlobalTypeEnv tcg_env' type_env' }
-- Update the global type env *including* the knot-tied one
-- so that if the source module reads in an interface unfolding
-- mentioning one of the dfuns from the boot module, then it
-- can "see" that boot dfun. See Trac #4003
where
check_export boot_avail -- boot_avail is exported by the boot iface
| name `elem` dfun_names = return ()
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment