Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: 6992ac09 by Cheng Shao at 2025-10-02T07:27:55-04:00 testsuite: remove unused expected output files This patch removes unused expected output files in the testsuites on platforms that we no longer support. - - - - - 39eaaaba by Ben Gamari at 2025-10-02T07:28:45-04:00 rts: Dynamically initialize built-in closures To resolve #26166 we need to eliminate references to undefined symbols in the runtime system. One such source of these is the runtime's static references to `I#` and `C#` due the `stg_INTLIKE` and `stg_CHARLIKE` arrays. To avoid this we make these dynamic, initializing them during RTS start-up. - - - - - c254c54b by Cheng Shao at 2025-10-02T07:29:33-04:00 compiler: only invoke keepCAFsForGHCi if internal-interpreter is enabled This patch makes the ghc library only invoke keepCAFsForGHCi if internal-interpreter is enabled. For cases when it's not (e.g. the host build of a cross ghc), this avoids unnecessarily retaining all CAFs in the heap. Also fixes the type signature of c_keepCAFsForGHCi to match the C ABI. - - - - - 52208cef by Simon Hengel at 2025-10-02T12:41:47-04:00 Update copyright in documentation - - - - - 4ae51be9 by Matthew Pickering at 2025-10-02T12:41:48-04:00 loader: Unify loadDecls and loadModuleLinkables functions These two functions nearly did the same thing. I have refactored them so that `loadDecls` now calls `loadModuleLinkables`. Fixes #26459 - - - - - 406b7b23 by Simon Hengel at 2025-10-02T12:41:48-04:00 Fix typo - - - - - 20 changed files: - compiler/GHC.hs - compiler/GHC/Driver/Main.hs - compiler/GHC/Linker/Loader.hs - compiler/GHC/Parser/PostProcess.hs - compiler/cbits/keepCAFsForGHCi.c - compiler/ghc.cabal.in - docs/users_guide/conf.py - + rts/BuiltinClosures.c - + rts/BuiltinClosures.h - rts/RtsStartup.c - rts/StgMiscClosures.cmm - rts/include/rts/Constants.h - rts/include/stg/MiscClosures.h - rts/rts.cabal - − testsuite/tests/process/process010.stdout-i386-unknown-solaris2 - − testsuite/tests/rts/linker/T11223/T11223_link_order_a_b_2_fail.stderr-ws-32-mingw32 - − testsuite/tests/rts/linker/T11223/T11223_simple_duplicate_lib.stderr-ws-32-mingw32 - − testsuite/tests/rts/outofmem.stderr-i386-apple-darwin - − testsuite/tests/rts/outofmem.stderr-i386-unknown-mingw32 - − testsuite/tests/rts/outofmem.stderr-powerpc-apple-darwin Changes: ===================================== compiler/GHC.hs ===================================== @@ -463,6 +463,9 @@ import System.Exit ( exitWith, ExitCode(..) ) import System.FilePath import System.IO.Error ( isDoesNotExistError ) +#if defined(HAVE_INTERNAL_INTERPRETER) +import Foreign.C +#endif -- %************************************************************************ -- %* * @@ -597,12 +600,12 @@ withCleanupSession ghc = ghc `MC.finally` cleanup initGhcMonad :: GhcMonad m => Maybe FilePath -> m () initGhcMonad mb_top_dir = setSession =<< liftIO ( do -#if !defined(javascript_HOST_ARCH) +#if defined(HAVE_INTERNAL_INTERPRETER) -- The call to c_keepCAFsForGHCi must not be optimized away. Even in non-debug builds. -- So we can't use assertM here. -- See Note [keepCAFsForGHCi] in keepCAFsForGHCi.c for details about why. !keep_cafs <- c_keepCAFsForGHCi - massert keep_cafs + massert $ keep_cafs /= 0 #endif initHscEnv mb_top_dir ) @@ -2092,7 +2095,7 @@ mkApiErr :: DynFlags -> SDoc -> GhcApiError mkApiErr dflags msg = GhcApiError (showSDoc dflags msg) -#if !defined(javascript_HOST_ARCH) +#if defined(HAVE_INTERNAL_INTERPRETER) foreign import ccall unsafe "keepCAFsForGHCi" - c_keepCAFsForGHCi :: IO Bool + c_keepCAFsForGHCi :: IO CBool #endif ===================================== compiler/GHC/Driver/Main.hs ===================================== @@ -2777,10 +2777,12 @@ hscCompileCoreExpr' hsc_env srcspan ds_expr = do {- load it -} bco_time <- getCurrentTime - (fv_hvs, mods_needed, units_needed) <- loadDecls interp hsc_env srcspan $ + (mods_needed, units_needed) <- loadDecls interp hsc_env srcspan $ Linkable bco_time this_mod $ NE.singleton $ BCOs bcos + -- Get the foreign reference to the name we should have just loaded. + mhvs <- lookupFromLoadedEnv interp (idName binding_id) {- Get the HValue for the root -} - return (expectJust $ lookup (idName binding_id) fv_hvs, mods_needed, units_needed) + return (expectJust mhvs, mods_needed, units_needed) ===================================== compiler/GHC/Linker/Loader.hs ===================================== @@ -28,6 +28,7 @@ module GHC.Linker.Loader , withExtendedLoadedEnv , extendLoadedEnv , deleteFromLoadedEnv + , lookupFromLoadedEnv -- * Internals , allocateBreakArrays , rmDupLinkables @@ -213,6 +214,15 @@ deleteFromLoadedEnv interp to_remove = return $ modifyClosureEnv pls $ \ce -> delListFromNameEnv ce to_remove +-- | Have we already loaded a name into the interpreter? +lookupFromLoadedEnv :: Interp -> Name -> IO (Maybe ForeignHValue) +lookupFromLoadedEnv interp name = do + mstate <- getLoaderState interp + return $ do + pls <- mstate + res <- lookupNameEnv (closure_env (linker_env pls)) name + return (snd res) + -- | Load the module containing the given Name and get its associated 'HValue'. -- -- Throws a 'ProgramError' if loading fails or the name cannot be found. @@ -258,7 +268,7 @@ loadDependencies interp hsc_env pls span needed_mods = do -- Link the packages and modules required pls1 <- loadPackages' interp hsc_env (ldUnits deps) pls - (pls2, succ) <- loadModuleLinkables interp hsc_env pls1 (ldNeededLinkables deps) + (pls2, succ) <- loadExternalModuleLinkables interp hsc_env pls1 (ldNeededLinkables deps) let this_pkgs_loaded = udfmRestrictKeys all_pkgs_loaded $ getUniqDSet trans_pkgs_needed all_pkgs_loaded = pkgs_loaded pls2 trans_pkgs_needed = unionManyUniqDSets (this_pkgs_needed : [ loaded_pkg_trans_deps pkg @@ -684,42 +694,23 @@ get_reachable_nodes hsc_env mods ********************************************************************* -} -loadDecls :: Interp -> HscEnv -> SrcSpan -> Linkable -> IO ([(Name, ForeignHValue)], [Linkable], PkgsLoaded) +-- | Load the dependencies of a linkable, and then load the linkable itself. +loadDecls :: Interp -> HscEnv -> SrcSpan -> Linkable -> IO ([Linkable], PkgsLoaded) loadDecls interp hsc_env span linkable = 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 - -- Link the foreign objects first; BCOs in linkable are ignored here. - (pls1, objs_ok) <- loadObjects interp hsc_env pls0 [linkable] - when (failed objs_ok) $ throwGhcExceptionIO $ ProgramError "loadDecls: failed to load foreign objects" - -- Link the packages and modules required - (pls, ok, links_needed, units_needed) <- loadDependencies interp hsc_env pls1 span needed_mods + (pls, ok, links_needed, units_needed) <- loadDependencies interp hsc_env pls0 span needed_mods if failed ok - then throwGhcExceptionIO (ProgramError "") + then throwGhcExceptionIO (ProgramError "could not load dependencies for decls") else do - -- Link the expression itself - let le = linker_env pls - let lb = linked_breaks pls - le2_itbl_env <- linkITbls interp (itbl_env le) (concat $ map bc_itbls cbcs) - le2_addr_env <- foldlM (\env cbc -> allocateTopStrings interp (bc_strs cbc) env) (addr_env le) cbcs - le2_breakarray_env <- allocateBreakArrays interp (breakarray_env lb) (catMaybes $ map bc_breaks cbcs) - le2_ccs_env <- allocateCCS interp (ccs_env lb) (catMaybes $ map bc_breaks cbcs) - let le2 = le { itbl_env = le2_itbl_env - , addr_env = le2_addr_env } - let lb2 = lb { breakarray_env = le2_breakarray_env - , ccs_env = le2_ccs_env } - - -- Link the necessary packages and linkables - new_bindings <- linkSomeBCOs interp (pkgs_loaded pls) le2 lb2 cbcs - nms_fhvs <- makeForeignNamedHValueRefs interp new_bindings - let ce2 = extendClosureEnv (closure_env le2) nms_fhvs - !pls2 = pls { linker_env = le2 { closure_env = ce2 } - , linked_breaks = lb2 } - mapM_ (linkSptEntry interp ce2) (concatMap bc_spt_entries cbcs) - return (pls2, (nms_fhvs, links_needed, units_needed)) + (pls2, ok2) <- loadInternalModuleLinkables interp hsc_env pls [linkable] + when (failed ok2) $ + throwGhcExceptionIO (ProgramError "could not load linkable for decls") + return (pls2, (links_needed, units_needed)) where cbcs = linkableBCOs linkable @@ -761,8 +752,29 @@ loadModule interp hsc_env mod = do ********************************************************************* -} -loadModuleLinkables :: Interp -> HscEnv -> LoaderState -> [Linkable] -> IO (LoaderState, SuccessFlag) -loadModuleLinkables interp hsc_env pls linkables +-- | Which closures from a Linkable to add to the 'ClosureEnv' in the 'LoaderState' +data KeepModuleLinkableDefinitions = KeepAllDefinitions -- ^ Keep all definitions + | KeepExternalDefinitions -- ^ Only keep external definitions + +-- | Interpret a 'KeepModuleLinkableDefinitions' specification to a predictate on 'Name' +keepDefinitions :: KeepModuleLinkableDefinitions -> (Name -> Bool) +keepDefinitions KeepAllDefinitions = const True +keepDefinitions KeepExternalDefinitions = isExternalName + +-- | Load a linkable from a module, and only add externally visible names to the +-- environment. +loadExternalModuleLinkables :: Interp -> HscEnv -> LoaderState -> [Linkable] -> IO (LoaderState, SuccessFlag) +loadExternalModuleLinkables interp hsc_env pls linkables = + loadModuleLinkables interp hsc_env pls KeepExternalDefinitions linkables + +-- | Load a linkable from a module, and add all the names from the linkable into the +-- closure environment. +loadInternalModuleLinkables :: Interp -> HscEnv -> LoaderState -> [Linkable] -> IO (LoaderState, SuccessFlag) +loadInternalModuleLinkables interp hsc_env pls linkables = + loadModuleLinkables interp hsc_env pls KeepAllDefinitions linkables + +loadModuleLinkables :: Interp -> HscEnv -> LoaderState -> KeepModuleLinkableDefinitions -> [Linkable] -> IO (LoaderState, SuccessFlag) +loadModuleLinkables interp hsc_env pls keep_spec linkables = mask_ $ do -- don't want to be interrupted by ^C in here debugTraceMsg (hsc_logger hsc_env) 3 $ @@ -777,7 +789,7 @@ loadModuleLinkables interp hsc_env pls linkables if failed ok_flag then return (pls1, Failed) else do - pls2 <- dynLinkBCOs interp pls1 bcos + pls2 <- dynLinkBCOs interp pls1 keep_spec bcos return (pls2, Succeeded) where (objs, bcos) = partitionLinkables linkables @@ -920,8 +932,8 @@ rmDupLinkables already ls ********************************************************************* -} -dynLinkBCOs :: Interp -> LoaderState -> [Linkable] -> IO LoaderState -dynLinkBCOs interp pls bcos = do +dynLinkBCOs :: Interp -> LoaderState -> KeepModuleLinkableDefinitions -> [Linkable] -> IO LoaderState +dynLinkBCOs interp pls keep_spec bcos = do let (bcos_loaded', new_bcos) = rmDupLinkables (bcos_loaded pls) bcos pls1 = pls { bcos_loaded = bcos_loaded' } @@ -945,7 +957,7 @@ dynLinkBCOs interp pls bcos = do names_and_refs <- linkSomeBCOs interp (pkgs_loaded pls) le2 lb2 cbcs -- We only want to add the external ones to the ClosureEnv - let (to_add, to_drop) = partition (isExternalName.fst) names_and_refs + let (to_add, to_drop) = partition (keepDefinitions keep_spec . fst) names_and_refs -- Immediately release any HValueRefs we're not going to add freeHValueRefs interp (map snd to_drop) ===================================== compiler/GHC/Parser/PostProcess.hs ===================================== @@ -2778,7 +2778,7 @@ the appropriate component of the product, discarding the rest: checkPatOf3 (_, _, p) = p -- interpret as a pattern We can easily define ambiguities between arbitrary subsets of interpretations. -For example, when we know ahead of type that only an expression or a command is +For example, when we know ahead of time that only an expression or a command is possible, but not a pattern, we can use a smaller type: type ExpCmd = (PV (LHsExpr GhcPs), PV (LHsCmd GhcPs)) ===================================== compiler/cbits/keepCAFsForGHCi.c ===================================== @@ -21,7 +21,7 @@ // the constructor to be run, allowing the assertion to succeed in the first place // as keepCAFs will have been set already during initialization of constructors. - +#if defined(HAVE_INTERNAL_INTERPRETER) bool keepCAFsForGHCi(void) __attribute__((constructor)); @@ -32,4 +32,4 @@ bool keepCAFsForGHCi(void) return was_set; } - +#endif ===================================== compiler/ghc.cabal.in ===================================== @@ -156,6 +156,7 @@ Library if flag(internal-interpreter) CPP-Options: -DHAVE_INTERNAL_INTERPRETER + cc-options: -DHAVE_INTERNAL_INTERPRETER -- if no dynamic system linker is available, don't try DLLs. if flag(dynamic-system-linker) ===================================== docs/users_guide/conf.py ===================================== @@ -7,6 +7,7 @@ # import sys import os +from datetime import datetime, timezone # Support for :base-ref:, etc. sys.path.insert(0, os.path.abspath('.')) @@ -44,7 +45,7 @@ rst_prolog = """ # General information about the project. project = u'Glasgow Haskell Compiler' -copyright = u'2023, GHC Team' +copyright = f"{datetime.now(timezone.utc).year}, GHC Team" # N.B. version comes from ghc_config release = version # The full version, including alpha/beta/rc tags. ===================================== rts/BuiltinClosures.c ===================================== @@ -0,0 +1,30 @@ +#include "Rts.h" +#include "Prelude.h" +#include "BuiltinClosures.h" + +/* + * Note [CHARLIKE and INTLIKE closures] + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * These are static representations of Chars and small Ints, so that + * we can remove dynamic Chars and Ints during garbage collection and + * replace them with references to the static objects. + */ + +StgIntCharlikeClosure stg_INTLIKE_closure[MAX_INTLIKE - MIN_INTLIKE + 1]; +StgIntCharlikeClosure stg_CHARLIKE_closure[MAX_CHARLIKE - MIN_CHARLIKE + 1]; + +void initBuiltinClosures(void) { + // INTLIKE closures + for (int i = MIN_INTLIKE; i <= MAX_INTLIKE; i++) { + StgIntCharlikeClosure *c = &stg_INTLIKE_closure[i - MIN_INTLIKE]; + SET_HDR((StgClosure* ) c, Izh_con_info, CCS_SYSTEM_OR_NULL); + c->data = i; + } + + // CHARLIKE closures + for (int i = MIN_CHARLIKE; i <= MAX_CHARLIKE; i++) { + StgIntCharlikeClosure *c = &stg_CHARLIKE_closure[i - MIN_CHARLIKE]; + SET_HDR((StgClosure* ) c, Czh_con_info, CCS_SYSTEM_OR_NULL); + c->data = i; + } +} ===================================== rts/BuiltinClosures.h ===================================== @@ -0,0 +1,14 @@ +/* + * (c) The GHC Team, 2025-2026 + * + * RTS/ghc-internal interface + * + */ + +#pragma once + +#include "BeginPrivate.h" + +void initBuiltinClosures(void); + +#include "EndPrivate.h" ===================================== rts/RtsStartup.c ===================================== @@ -14,6 +14,7 @@ #include "linker/MMap.h" #include "RtsFlags.h" #include "RtsUtils.h" +#include "BuiltinClosures.h" #include "Prelude.h" #include "Printer.h" /* DEBUG_LoadSymbols */ #include "Schedule.h" /* initScheduler */ @@ -373,6 +374,9 @@ hs_init_ghc(int *argc, char **argv[], RtsConfig rts_config) traceInitEvent(traceOSProcessInfo); flushTrace(); + /* initialize INTLIKE and CHARLIKE closures */ + initBuiltinClosures(); + /* initialize the storage manager */ initStorage(); ===================================== rts/StgMiscClosures.cmm ===================================== @@ -13,8 +13,6 @@ #include "Cmm.h" import pthread_mutex_lock; -import ghczminternal_GHCziInternalziTypes_Czh_info; -import ghczminternal_GHCziInternalziTypes_Izh_info; import AcquireSRWLockExclusive; import ReleaseSRWLockExclusive; @@ -23,7 +21,6 @@ import whitehole_lockClosure_spin; import whitehole_lockClosure_yield; #endif - #if !defined(UnregisterisedCompiler) import CLOSURE CCS_SYSTEM; import CLOSURE ENT_DYN_IND_ctr; @@ -1031,554 +1028,3 @@ INFO_TABLE_CONSTR(stg_ASYNCIO_LIVE0,0,0,0,CONSTR_NOCAF,"ASYNCIO_LIVE0","ASYNCIO_ { foreign "C" barf("ASYNCIO_LIVE0 object (%p) entered!", R1) never returns; } CLOSURE(stg_ASYNCIO_LIVE0_closure,stg_ASYNCIO_LIVE0); - -/* ---------------------------------------------------------------------------- - Note [CHARLIKE and INTLIKE closures] - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - These are static representations of Chars and small Ints, so that - we can remove dynamic Chars and Ints during garbage collection and - replace them with references to the static objects. - ------------------------------------------------------------------------- */ - -#define Char_hash_con_info ghczminternal_GHCziInternalziTypes_Czh_con_info -#define Int_hash_con_info ghczminternal_GHCziInternalziTypes_Izh_con_info - -#define CHARLIKE_HDR(n) CLOSURE(Char_hash_con_info, n) -#define INTLIKE_HDR(n) CLOSURE(Int_hash_con_info, n) - -section "data" { - stg_CHARLIKE_closure: - CHARLIKE_HDR(0) - CHARLIKE_HDR(1) - CHARLIKE_HDR(2) - CHARLIKE_HDR(3) - CHARLIKE_HDR(4) - CHARLIKE_HDR(5) - CHARLIKE_HDR(6) - CHARLIKE_HDR(7) - CHARLIKE_HDR(8) - CHARLIKE_HDR(9) - CHARLIKE_HDR(10) - CHARLIKE_HDR(11) - CHARLIKE_HDR(12) - CHARLIKE_HDR(13) - CHARLIKE_HDR(14) - CHARLIKE_HDR(15) - CHARLIKE_HDR(16) - CHARLIKE_HDR(17) - CHARLIKE_HDR(18) - CHARLIKE_HDR(19) - CHARLIKE_HDR(20) - CHARLIKE_HDR(21) - CHARLIKE_HDR(22) - CHARLIKE_HDR(23) - CHARLIKE_HDR(24) - CHARLIKE_HDR(25) - CHARLIKE_HDR(26) - CHARLIKE_HDR(27) - CHARLIKE_HDR(28) - CHARLIKE_HDR(29) - CHARLIKE_HDR(30) - CHARLIKE_HDR(31) - CHARLIKE_HDR(32) - CHARLIKE_HDR(33) - CHARLIKE_HDR(34) - CHARLIKE_HDR(35) - CHARLIKE_HDR(36) - CHARLIKE_HDR(37) - CHARLIKE_HDR(38) - CHARLIKE_HDR(39) - CHARLIKE_HDR(40) - CHARLIKE_HDR(41) - CHARLIKE_HDR(42) - CHARLIKE_HDR(43) - CHARLIKE_HDR(44) - CHARLIKE_HDR(45) - CHARLIKE_HDR(46) - CHARLIKE_HDR(47) - CHARLIKE_HDR(48) - CHARLIKE_HDR(49) - CHARLIKE_HDR(50) - CHARLIKE_HDR(51) - CHARLIKE_HDR(52) - CHARLIKE_HDR(53) - CHARLIKE_HDR(54) - CHARLIKE_HDR(55) - CHARLIKE_HDR(56) - CHARLIKE_HDR(57) - CHARLIKE_HDR(58) - CHARLIKE_HDR(59) - CHARLIKE_HDR(60) - CHARLIKE_HDR(61) - CHARLIKE_HDR(62) - CHARLIKE_HDR(63) - CHARLIKE_HDR(64) - CHARLIKE_HDR(65) - CHARLIKE_HDR(66) - CHARLIKE_HDR(67) - CHARLIKE_HDR(68) - CHARLIKE_HDR(69) - CHARLIKE_HDR(70) - CHARLIKE_HDR(71) - CHARLIKE_HDR(72) - CHARLIKE_HDR(73) - CHARLIKE_HDR(74) - CHARLIKE_HDR(75) - CHARLIKE_HDR(76) - CHARLIKE_HDR(77) - CHARLIKE_HDR(78) - CHARLIKE_HDR(79) - CHARLIKE_HDR(80) - CHARLIKE_HDR(81) - CHARLIKE_HDR(82) - CHARLIKE_HDR(83) - CHARLIKE_HDR(84) - CHARLIKE_HDR(85) - CHARLIKE_HDR(86) - CHARLIKE_HDR(87) - CHARLIKE_HDR(88) - CHARLIKE_HDR(89) - CHARLIKE_HDR(90) - CHARLIKE_HDR(91) - CHARLIKE_HDR(92) - CHARLIKE_HDR(93) - CHARLIKE_HDR(94) - CHARLIKE_HDR(95) - CHARLIKE_HDR(96) - CHARLIKE_HDR(97) - CHARLIKE_HDR(98) - CHARLIKE_HDR(99) - CHARLIKE_HDR(100) - CHARLIKE_HDR(101) - CHARLIKE_HDR(102) - CHARLIKE_HDR(103) - CHARLIKE_HDR(104) - CHARLIKE_HDR(105) - CHARLIKE_HDR(106) - CHARLIKE_HDR(107) - CHARLIKE_HDR(108) - CHARLIKE_HDR(109) - CHARLIKE_HDR(110) - CHARLIKE_HDR(111) - CHARLIKE_HDR(112) - CHARLIKE_HDR(113) - CHARLIKE_HDR(114) - CHARLIKE_HDR(115) - CHARLIKE_HDR(116) - CHARLIKE_HDR(117) - CHARLIKE_HDR(118) - CHARLIKE_HDR(119) - CHARLIKE_HDR(120) - CHARLIKE_HDR(121) - CHARLIKE_HDR(122) - CHARLIKE_HDR(123) - CHARLIKE_HDR(124) - CHARLIKE_HDR(125) - CHARLIKE_HDR(126) - CHARLIKE_HDR(127) - CHARLIKE_HDR(128) - CHARLIKE_HDR(129) - CHARLIKE_HDR(130) - CHARLIKE_HDR(131) - CHARLIKE_HDR(132) - CHARLIKE_HDR(133) - CHARLIKE_HDR(134) - CHARLIKE_HDR(135) - CHARLIKE_HDR(136) - CHARLIKE_HDR(137) - CHARLIKE_HDR(138) - CHARLIKE_HDR(139) - CHARLIKE_HDR(140) - CHARLIKE_HDR(141) - CHARLIKE_HDR(142) - CHARLIKE_HDR(143) - CHARLIKE_HDR(144) - CHARLIKE_HDR(145) - CHARLIKE_HDR(146) - CHARLIKE_HDR(147) - CHARLIKE_HDR(148) - CHARLIKE_HDR(149) - CHARLIKE_HDR(150) - CHARLIKE_HDR(151) - CHARLIKE_HDR(152) - CHARLIKE_HDR(153) - CHARLIKE_HDR(154) - CHARLIKE_HDR(155) - CHARLIKE_HDR(156) - CHARLIKE_HDR(157) - CHARLIKE_HDR(158) - CHARLIKE_HDR(159) - CHARLIKE_HDR(160) - CHARLIKE_HDR(161) - CHARLIKE_HDR(162) - CHARLIKE_HDR(163) - CHARLIKE_HDR(164) - CHARLIKE_HDR(165) - CHARLIKE_HDR(166) - CHARLIKE_HDR(167) - CHARLIKE_HDR(168) - CHARLIKE_HDR(169) - CHARLIKE_HDR(170) - CHARLIKE_HDR(171) - CHARLIKE_HDR(172) - CHARLIKE_HDR(173) - CHARLIKE_HDR(174) - CHARLIKE_HDR(175) - CHARLIKE_HDR(176) - CHARLIKE_HDR(177) - CHARLIKE_HDR(178) - CHARLIKE_HDR(179) - CHARLIKE_HDR(180) - CHARLIKE_HDR(181) - CHARLIKE_HDR(182) - CHARLIKE_HDR(183) - CHARLIKE_HDR(184) - CHARLIKE_HDR(185) - CHARLIKE_HDR(186) - CHARLIKE_HDR(187) - CHARLIKE_HDR(188) - CHARLIKE_HDR(189) - CHARLIKE_HDR(190) - CHARLIKE_HDR(191) - CHARLIKE_HDR(192) - CHARLIKE_HDR(193) - CHARLIKE_HDR(194) - CHARLIKE_HDR(195) - CHARLIKE_HDR(196) - CHARLIKE_HDR(197) - CHARLIKE_HDR(198) - CHARLIKE_HDR(199) - CHARLIKE_HDR(200) - CHARLIKE_HDR(201) - CHARLIKE_HDR(202) - CHARLIKE_HDR(203) - CHARLIKE_HDR(204) - CHARLIKE_HDR(205) - CHARLIKE_HDR(206) - CHARLIKE_HDR(207) - CHARLIKE_HDR(208) - CHARLIKE_HDR(209) - CHARLIKE_HDR(210) - CHARLIKE_HDR(211) - CHARLIKE_HDR(212) - CHARLIKE_HDR(213) - CHARLIKE_HDR(214) - CHARLIKE_HDR(215) - CHARLIKE_HDR(216) - CHARLIKE_HDR(217) - CHARLIKE_HDR(218) - CHARLIKE_HDR(219) - CHARLIKE_HDR(220) - CHARLIKE_HDR(221) - CHARLIKE_HDR(222) - CHARLIKE_HDR(223) - CHARLIKE_HDR(224) - CHARLIKE_HDR(225) - CHARLIKE_HDR(226) - CHARLIKE_HDR(227) - CHARLIKE_HDR(228) - CHARLIKE_HDR(229) - CHARLIKE_HDR(230) - CHARLIKE_HDR(231) - CHARLIKE_HDR(232) - CHARLIKE_HDR(233) - CHARLIKE_HDR(234) - CHARLIKE_HDR(235) - CHARLIKE_HDR(236) - CHARLIKE_HDR(237) - CHARLIKE_HDR(238) - CHARLIKE_HDR(239) - CHARLIKE_HDR(240) - CHARLIKE_HDR(241) - CHARLIKE_HDR(242) - CHARLIKE_HDR(243) - CHARLIKE_HDR(244) - CHARLIKE_HDR(245) - CHARLIKE_HDR(246) - CHARLIKE_HDR(247) - CHARLIKE_HDR(248) - CHARLIKE_HDR(249) - CHARLIKE_HDR(250) - CHARLIKE_HDR(251) - CHARLIKE_HDR(252) - CHARLIKE_HDR(253) - CHARLIKE_HDR(254) - CHARLIKE_HDR(255) -} - -section "data" { - stg_INTLIKE_closure: - INTLIKE_HDR(-16) /* MIN_INTLIKE == -16 */ - INTLIKE_HDR(-15) - INTLIKE_HDR(-14) - INTLIKE_HDR(-13) - INTLIKE_HDR(-12) - INTLIKE_HDR(-11) - INTLIKE_HDR(-10) - INTLIKE_HDR(-9) - INTLIKE_HDR(-8) - INTLIKE_HDR(-7) - INTLIKE_HDR(-6) - INTLIKE_HDR(-5) - INTLIKE_HDR(-4) - INTLIKE_HDR(-3) - INTLIKE_HDR(-2) - INTLIKE_HDR(-1) - INTLIKE_HDR(0) - INTLIKE_HDR(1) - INTLIKE_HDR(2) - INTLIKE_HDR(3) - INTLIKE_HDR(4) - INTLIKE_HDR(5) - INTLIKE_HDR(6) - INTLIKE_HDR(7) - INTLIKE_HDR(8) - INTLIKE_HDR(9) - INTLIKE_HDR(10) - INTLIKE_HDR(11) - INTLIKE_HDR(12) - INTLIKE_HDR(13) - INTLIKE_HDR(14) - INTLIKE_HDR(15) - INTLIKE_HDR(16) - INTLIKE_HDR(17) - INTLIKE_HDR(18) - INTLIKE_HDR(19) - INTLIKE_HDR(20) - INTLIKE_HDR(21) - INTLIKE_HDR(22) - INTLIKE_HDR(23) - INTLIKE_HDR(24) - INTLIKE_HDR(25) - INTLIKE_HDR(26) - INTLIKE_HDR(27) - INTLIKE_HDR(28) - INTLIKE_HDR(29) - INTLIKE_HDR(30) - INTLIKE_HDR(31) - INTLIKE_HDR(32) - INTLIKE_HDR(33) - INTLIKE_HDR(34) - INTLIKE_HDR(35) - INTLIKE_HDR(36) - INTLIKE_HDR(37) - INTLIKE_HDR(38) - INTLIKE_HDR(39) - INTLIKE_HDR(40) - INTLIKE_HDR(41) - INTLIKE_HDR(42) - INTLIKE_HDR(43) - INTLIKE_HDR(44) - INTLIKE_HDR(45) - INTLIKE_HDR(46) - INTLIKE_HDR(47) - INTLIKE_HDR(48) - INTLIKE_HDR(49) - INTLIKE_HDR(50) - INTLIKE_HDR(51) - INTLIKE_HDR(52) - INTLIKE_HDR(53) - INTLIKE_HDR(54) - INTLIKE_HDR(55) - INTLIKE_HDR(56) - INTLIKE_HDR(57) - INTLIKE_HDR(58) - INTLIKE_HDR(59) - INTLIKE_HDR(60) - INTLIKE_HDR(61) - INTLIKE_HDR(62) - INTLIKE_HDR(63) - INTLIKE_HDR(64) - INTLIKE_HDR(65) - INTLIKE_HDR(66) - INTLIKE_HDR(67) - INTLIKE_HDR(68) - INTLIKE_HDR(69) - INTLIKE_HDR(70) - INTLIKE_HDR(71) - INTLIKE_HDR(72) - INTLIKE_HDR(73) - INTLIKE_HDR(74) - INTLIKE_HDR(75) - INTLIKE_HDR(76) - INTLIKE_HDR(77) - INTLIKE_HDR(78) - INTLIKE_HDR(79) - INTLIKE_HDR(80) - INTLIKE_HDR(81) - INTLIKE_HDR(82) - INTLIKE_HDR(83) - INTLIKE_HDR(84) - INTLIKE_HDR(85) - INTLIKE_HDR(86) - INTLIKE_HDR(87) - INTLIKE_HDR(88) - INTLIKE_HDR(89) - INTLIKE_HDR(90) - INTLIKE_HDR(91) - INTLIKE_HDR(92) - INTLIKE_HDR(93) - INTLIKE_HDR(94) - INTLIKE_HDR(95) - INTLIKE_HDR(96) - INTLIKE_HDR(97) - INTLIKE_HDR(98) - INTLIKE_HDR(99) - INTLIKE_HDR(100) - INTLIKE_HDR(101) - INTLIKE_HDR(102) - INTLIKE_HDR(103) - INTLIKE_HDR(104) - INTLIKE_HDR(105) - INTLIKE_HDR(106) - INTLIKE_HDR(107) - INTLIKE_HDR(108) - INTLIKE_HDR(109) - INTLIKE_HDR(110) - INTLIKE_HDR(111) - INTLIKE_HDR(112) - INTLIKE_HDR(113) - INTLIKE_HDR(114) - INTLIKE_HDR(115) - INTLIKE_HDR(116) - INTLIKE_HDR(117) - INTLIKE_HDR(118) - INTLIKE_HDR(119) - INTLIKE_HDR(120) - INTLIKE_HDR(121) - INTLIKE_HDR(122) - INTLIKE_HDR(123) - INTLIKE_HDR(124) - INTLIKE_HDR(125) - INTLIKE_HDR(126) - INTLIKE_HDR(127) - INTLIKE_HDR(128) - INTLIKE_HDR(129) - INTLIKE_HDR(130) - INTLIKE_HDR(131) - INTLIKE_HDR(132) - INTLIKE_HDR(133) - INTLIKE_HDR(134) - INTLIKE_HDR(135) - INTLIKE_HDR(136) - INTLIKE_HDR(137) - INTLIKE_HDR(138) - INTLIKE_HDR(139) - INTLIKE_HDR(140) - INTLIKE_HDR(141) - INTLIKE_HDR(142) - INTLIKE_HDR(143) - INTLIKE_HDR(144) - INTLIKE_HDR(145) - INTLIKE_HDR(146) - INTLIKE_HDR(147) - INTLIKE_HDR(148) - INTLIKE_HDR(149) - INTLIKE_HDR(150) - INTLIKE_HDR(151) - INTLIKE_HDR(152) - INTLIKE_HDR(153) - INTLIKE_HDR(154) - INTLIKE_HDR(155) - INTLIKE_HDR(156) - INTLIKE_HDR(157) - INTLIKE_HDR(158) - INTLIKE_HDR(159) - INTLIKE_HDR(160) - INTLIKE_HDR(161) - INTLIKE_HDR(162) - INTLIKE_HDR(163) - INTLIKE_HDR(164) - INTLIKE_HDR(165) - INTLIKE_HDR(166) - INTLIKE_HDR(167) - INTLIKE_HDR(168) - INTLIKE_HDR(169) - INTLIKE_HDR(170) - INTLIKE_HDR(171) - INTLIKE_HDR(172) - INTLIKE_HDR(173) - INTLIKE_HDR(174) - INTLIKE_HDR(175) - INTLIKE_HDR(176) - INTLIKE_HDR(177) - INTLIKE_HDR(178) - INTLIKE_HDR(179) - INTLIKE_HDR(180) - INTLIKE_HDR(181) - INTLIKE_HDR(182) - INTLIKE_HDR(183) - INTLIKE_HDR(184) - INTLIKE_HDR(185) - INTLIKE_HDR(186) - INTLIKE_HDR(187) - INTLIKE_HDR(188) - INTLIKE_HDR(189) - INTLIKE_HDR(190) - INTLIKE_HDR(191) - INTLIKE_HDR(192) - INTLIKE_HDR(193) - INTLIKE_HDR(194) - INTLIKE_HDR(195) - INTLIKE_HDR(196) - INTLIKE_HDR(197) - INTLIKE_HDR(198) - INTLIKE_HDR(199) - INTLIKE_HDR(200) - INTLIKE_HDR(201) - INTLIKE_HDR(202) - INTLIKE_HDR(203) - INTLIKE_HDR(204) - INTLIKE_HDR(205) - INTLIKE_HDR(206) - INTLIKE_HDR(207) - INTLIKE_HDR(208) - INTLIKE_HDR(209) - INTLIKE_HDR(210) - INTLIKE_HDR(211) - INTLIKE_HDR(212) - INTLIKE_HDR(213) - INTLIKE_HDR(214) - INTLIKE_HDR(215) - INTLIKE_HDR(216) - INTLIKE_HDR(217) - INTLIKE_HDR(218) - INTLIKE_HDR(219) - INTLIKE_HDR(220) - INTLIKE_HDR(221) - INTLIKE_HDR(222) - INTLIKE_HDR(223) - INTLIKE_HDR(224) - INTLIKE_HDR(225) - INTLIKE_HDR(226) - INTLIKE_HDR(227) - INTLIKE_HDR(228) - INTLIKE_HDR(229) - INTLIKE_HDR(230) - INTLIKE_HDR(231) - INTLIKE_HDR(232) - INTLIKE_HDR(233) - INTLIKE_HDR(234) - INTLIKE_HDR(235) - INTLIKE_HDR(236) - INTLIKE_HDR(237) - INTLIKE_HDR(238) - INTLIKE_HDR(239) - INTLIKE_HDR(240) - INTLIKE_HDR(241) - INTLIKE_HDR(242) - INTLIKE_HDR(243) - INTLIKE_HDR(244) - INTLIKE_HDR(245) - INTLIKE_HDR(246) - INTLIKE_HDR(247) - INTLIKE_HDR(248) - INTLIKE_HDR(249) - INTLIKE_HDR(250) - INTLIKE_HDR(251) - INTLIKE_HDR(252) - INTLIKE_HDR(253) - INTLIKE_HDR(254) - INTLIKE_HDR(255) /* MAX_INTLIKE == 255 - See #16961 for why 255 */ -} ===================================== rts/include/rts/Constants.h ===================================== @@ -57,11 +57,12 @@ #define MAX_SPEC_CONSTR_SIZE 2 /* Range of built-in table of static small int-like and char-like closures. + * Range is inclusive of both minimum and maximum. * * NB. This corresponds with the number of actual INTLIKE/CHARLIKE * closures defined in rts/StgMiscClosures.cmm. */ -#define MAX_INTLIKE 255 +#define MAX_INTLIKE 255 /* See #16961 for why 255 */ #define MIN_INTLIKE (-16) #define MAX_CHARLIKE 255 ===================================== rts/include/stg/MiscClosures.h ===================================== @@ -277,8 +277,8 @@ RTS_ENTRY(stg_NO_FINALIZER); extern StgWordArray stg_CHARLIKE_closure; extern StgWordArray stg_INTLIKE_closure; #else -extern StgIntCharlikeClosure stg_CHARLIKE_closure[]; -extern StgIntCharlikeClosure stg_INTLIKE_closure[]; +extern StgIntCharlikeClosure stg_CHARLIKE_closure[MAX_CHARLIKE - MIN_CHARLIKE + 1]; +extern StgIntCharlikeClosure stg_INTLIKE_closure[MAX_INTLIKE - MIN_INTLIKE + 1]; #endif /* StgStartup */ ===================================== rts/rts.cabal ===================================== @@ -403,6 +403,7 @@ library adjustor/AdjustorPool.c ExecPage.c Arena.c + BuiltinClosures.c Capability.c CheckUnload.c CheckVectorSupport.c ===================================== testsuite/tests/process/process010.stdout-i386-unknown-solaris2 deleted ===================================== @@ -1,4 +0,0 @@ -ExitSuccess -ExitFailure 255 -Exc: /non/existent: rawSystem: runInteractiveProcess: exec: does not exist (No such file or directory) -Done ===================================== testsuite/tests/rts/linker/T11223/T11223_link_order_a_b_2_fail.stderr-ws-32-mingw32 deleted ===================================== @@ -1,25 +0,0 @@ -GHC runtime linker: fatal error: I found a duplicate definition for symbol - _a -whilst processing object file - E:\ghc-dev\msys64\home\Tamar\ghc\testsuite\tests\rts\T11223\T11223_link_order_a_b_2_fail.run\libfoo_link_lib_3.a -The symbol was previously defined in - E:\ghc-dev\msys64\home\Tamar\ghc\testsuite\tests\rts\T11223\T11223_link_order_a_b_2_fail.run\libbar_link_lib_3.a(#3:bar_link_lib_3.o) -This could be caused by: - * Loading two different object files which export the same symbol - * Specifying the same object file twice on the GHCi command line - * An incorrect `package.conf' entry, causing some object to be - loaded twice. -ghc-stage2.exe: ^^ Could not load '_c', dependency unresolved. See top entry above. You might consider using --optimistic-linking - - -GHC.ByteCode.Linker: can't find label -During interactive linking, GHCi couldn't find the following symbol: - c -This may be due to you not asking GHCi to load extra object files, -archives or DLLs needed by your current session. Restart GHCi, specifying -the missing library using the -L/path/to/object/dir and -lmissinglibname -flags, or simply by naming the relevant files on the GHCi command line. -Alternatively, this link failure might indicate a bug in GHCi. -If you suspect the latter, please report this as a GHC bug: - https://www.haskell.org/ghc/reportabug - ===================================== testsuite/tests/rts/linker/T11223/T11223_simple_duplicate_lib.stderr-ws-32-mingw32 deleted ===================================== @@ -1,25 +0,0 @@ -GHC runtime linker: fatal error: I found a duplicate definition for symbol - _a -whilst processing object file - E:\ghc-dev\msys64\home\Tamar\ghc\testsuite\tests\rts\T11223\T11223_simple_duplicate_lib.run\libfoo_dup_lib.a -The symbol was previously defined in - E:\ghc-dev\msys64\home\Tamar\ghc\testsuite\tests\rts\T11223\T11223_simple_duplicate_lib.run\bar_dup_lib.o -This could be caused by: - * Loading two different object files which export the same symbol - * Specifying the same object file twice on the GHCi command line - * An incorrect `package.conf' entry, causing some object to be - loaded twice. -ghc-stage2.exe: ^^ Could not load '_c', dependency unresolved. See top entry above. You might consider using --optimistic-linking - - -GHC.ByteCode.Linker: can't find label -During interactive linking, GHCi couldn't find the following symbol: - c -This may be due to you not asking GHCi to load extra object files, -archives or DLLs needed by your current session. Restart GHCi, specifying -the missing library using the -L/path/to/object/dir and -lmissinglibname -flags, or simply by naming the relevant files on the GHCi command line. -Alternatively, this link failure might indicate a bug in GHCi. -If you suspect the latter, please report this as a GHC bug: - https://www.haskell.org/ghc/reportabug - ===================================== testsuite/tests/rts/outofmem.stderr-i386-apple-darwin deleted ===================================== @@ -1 +0,0 @@ -outofmem: memory allocation failed (requested 1074790400 bytes) ===================================== testsuite/tests/rts/outofmem.stderr-i386-unknown-mingw32 deleted ===================================== @@ -1 +0,0 @@ -outofmem.exe: Out of memory ===================================== testsuite/tests/rts/outofmem.stderr-powerpc-apple-darwin deleted ===================================== @@ -1 +0,0 @@ -outofmem: memory allocation failed (requested 1074790400 bytes) View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/911b0177199a3197a28d9ce04defaac... -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/911b0177199a3197a28d9ce04defaac... You're receiving this email because of your account on gitlab.haskell.org.