[Git][ghc/ghc][wip/marge_bot_batch_merge_job] 6 commits: doc: update Flavour type in hadrian user-settings
Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: 18bf7f5c by Léana Jiang at 2026-01-22T08:58:45-05:00 doc: update Flavour type in hadrian user-settings - - - - - 3d5a1365 by Cheng Shao at 2026-01-22T08:59:28-05:00 hadrian: add missing notCross predicate for stage0 -O0 There are a few hard-coded hadrian args that pass -O0 when compiling some heavy modules in stage0, which only makes sense when not cross-compiling and when cross-compiling we need properly optimized stage0 packages. So this patch adds the missing `notCross` predicate in those places. - - - - - ee937134 by Matthew Pickering at 2026-01-22T09:00:10-05:00 Fix ghc-experimental GHC.Exception.Backtrace.Experimental module This module wasn't added to the cabal file so it was never compiled or included in the library. - - - - - 1b490f5a by Zubin Duggal at 2026-01-22T09:00:53-05:00 hadrian: Add ghc-{experimental,internal}.cabal to the list of dependencies of the doc target We need these files to detect the version of these libraries Fixes #26738 - - - - - 7b6c84f5 by Cheng Shao at 2026-01-22T09:32:08-05:00 rts: avoid Cmm loop to initialize Array#/SmallArray# Previously, `newArray#`/`newSmallArray#` called an RTS C function to allocate the `Array#`/`SmallArray#`, then used a Cmm loop to initialize the elements. Cmm doesn't have native for-loop so the code is a bit awkward, and it's less efficient than a C loop, since the C compiler can effectively vectorize the loop with optimizations. So this patch moves the loop that initializes the elements to the C side. `allocateMutArrPtrs`/`allocateSmallMutArrPtrs` now takes a new `init` argument and initializes the elements if `init` is non-NULL. - - - - - 8f45dfca by Cheng Shao at 2026-01-22T09:32:09-05:00 Fix testsuite run for +ipe flavour transformer This patch makes the +ipe flavour transformer pass the entire testsuite: - An RTS debug option `-DI` is added, the IPE trace information is now only printed with `-DI`. The test cases that do require IPE trace are now run with `-DI`. - The testsuite config option `ghc_with_ipe` is added, enabled when running the testsuite with `+ipe`, which skips a few tests that are sensitive to eventlog output, allocation patterns etc that can fail under `+ipe`. This is the first step towards #26799. Co-authored-by: Codex <codex@openai.com> - - - - - 26 changed files: - docs/users_guide/runtime_control.rst - hadrian/doc/user-settings.md - hadrian/src/Flavour.hs - hadrian/src/Rules/Documentation.hs - hadrian/src/Settings/Packages.hs - libraries/ghc-compact/tests/all.T - libraries/ghc-experimental/ghc-experimental.cabal.in - libraries/ghc-experimental/src/GHC/Exception/Backtrace/Experimental.hs - libraries/ghc-internal/tests/backtraces/all.T - rts/AllocArray.c - rts/AllocArray.h - rts/ClosureTable.c - rts/Heap.c - rts/PrimOps.cmm - rts/RtsFlags.c - rts/Threads.c - rts/Trace.c - rts/Weak.c - rts/include/rts/Flags.h - testsuite/driver/testglobals.py - testsuite/driver/testlib.py - testsuite/tests/interface-stability/ghc-experimental-exports.stdout - testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32 - testsuite/tests/rts/Makefile - testsuite/tests/rts/all.T - testsuite/tests/rts/ipe/all.T Changes: ===================================== docs/users_guide/runtime_control.rst ===================================== @@ -1588,6 +1588,7 @@ recommended for everyday use! .. rts-flag:: -Ds DEBUG: scheduler .. rts-flag:: -Di DEBUG: interpreter +.. rts-flag:: -DI DEBUG: IPE .. rts-flag:: -Dw DEBUG: weak .. rts-flag:: -DG DEBUG: gccafs .. rts-flag:: -Dg DEBUG: gc ===================================== hadrian/doc/user-settings.md ===================================== @@ -19,14 +19,18 @@ A build _flavour_ is a collection of build settings that fully define a GHC buil data Flavour = Flavour { -- | Flavour name, to select this flavour from command line. name :: String, - -- | Use these command line arguments. - args :: Args, + -- | Use these extra command line arguments. + -- This can't depend on the result of configuring a package (ie, using readContextData) + extraArgs :: Args, -- | Build these packages. packages :: Stage -> Action [Package], -- | Bignum backend: 'native', 'gmp', 'ffi', etc. bignumBackend :: String, -- | Check selected bignum backend against native backend bignumCheck :: Bool, + -- | Build the @text@ package with @simdutf@ support. Disabled by + -- default due to packaging difficulties described in #20724. + textWithSIMDUTF :: Bool, -- | Build libraries these ways. libraryWays :: Ways, -- | Build RTS these ways. @@ -45,11 +49,18 @@ data Flavour = Flavour { -- | Build the GHC executable against the threaded runtime system. ghcThreaded :: Stage -- ^ stage of the /built/ compiler -> Bool, + + ghcSplitSections :: Bool, -- ^ Whether to enable split sections -- | Whether to build docs and which ones -- (haddocks, user manual, haddock manual) ghcDocs :: Action DocTargets, + + -- | Whether to uses hashes or inplace for unit ids + hashUnitIds :: Bool, + -- | Whether to generate .hie files ghcHieFiles :: Stage -> Bool + } ``` Hadrian provides several built-in flavours (`default`, `quick`, and a few ===================================== hadrian/src/Flavour.hs ===================================== @@ -384,9 +384,15 @@ omitPragmas = addArgs -- | Build stage2 dependencies with options to enable IPE debugging -- information. enableIPE :: Flavour -> Flavour -enableIPE = addArgs - $ notStage0 ? builder (Ghc CompileHs) - ? pure ["-finfo-table-map", "-fdistinct-constructor-tables"] +enableIPE = + addArgs $ + mconcat + [ notStage0 + ? builder (Ghc CompileHs) + ? pure + ["-finfo-table-map", "-fdistinct-constructor-tables"], + builder Testsuite ? arg "--config=ghc_with_ipe=True" + ] enableLateCCS :: Flavour -> Flavour enableLateCCS = addArgs ===================================== hadrian/src/Rules/Documentation.hs ===================================== @@ -74,6 +74,8 @@ needDocDeps = do let templatedCabalFiles = map pkgCabalFile [ ghcBoot , ghcBootTh + , ghcExperimental + , ghcInternal , ghci , compiler , ghcHeap ===================================== hadrian/src/Settings/Packages.hs ===================================== @@ -53,7 +53,7 @@ packageArgs = do -- for Stage0 only so we can link ghc-pkg against it, so there is little -- reason to spend the effort to optimise it. , package cabal ? - stage0 ? builder Ghc ? arg "-O0" + andM [stage0, notCross] ? builder Ghc ? arg "-O0" ------------------------------- compiler ------------------------------- , package compiler ? mconcat @@ -71,7 +71,7 @@ packageArgs = do -- These files take a very long time to compile with -O1, -- so we use -O0 for them just in Stage0 to speed up the -- build but not affect Stage1+ executables - , inputs ["**/GHC/Hs/Instances.hs", "**/GHC/Driver/Session.hs"] ? stage0 ? + , inputs ["**/GHC/Hs/Instances.hs", "**/GHC/Driver/Session.hs"] ? andM [stage0, notCross] ? pure ["-O0"] ] , builder (Cabal Setup) ? mconcat ===================================== libraries/ghc-compact/tests/all.T ===================================== @@ -20,7 +20,8 @@ test('compact_gc', [fragile_for(17253, ['ghci']), ignore_stdout], compile_and_ru # this test computes closure sizes and those are affected # by the ghci and prof ways, because of BCOs and profiling headers. # Optimization levels slightly change what is/isn't shared so only run in normal mode -test('compact_share', only_ways(['normal']), compile_and_run, ['']) +test('compact_share', [only_ways(['normal']), when(ghc_with_ipe(), skip)], # IPE changes allocation/layout affecting compactSize output. + compile_and_run, ['']) test('compact_bench', [ ignore_stdout, extra_run_opts('100') ], compile_and_run, ['']) test('T17044', normal, compile_and_run, ['']) ===================================== libraries/ghc-experimental/ghc-experimental.cabal.in ===================================== @@ -44,6 +44,7 @@ library GHC.Stats.Experimental Prelude.Experimental System.Mem.Experimental + GHC.Exception.Backtrace.Experimental if arch(wasm32) exposed-modules: GHC.Wasm.Prim other-extensions: ===================================== libraries/ghc-experimental/src/GHC/Exception/Backtrace/Experimental.hs ===================================== @@ -15,7 +15,7 @@ module GHC.Exception.Backtrace.Experimental , getBacktraceMechanismState , setBacktraceMechanismState -- * Collecting backtraces - , Backtraces(..), + , Backtraces(..) , displayBacktraces , collectBacktraces -- * Collecting exception annotations on throwing 'Exception's ===================================== libraries/ghc-internal/tests/backtraces/all.T ===================================== @@ -2,5 +2,5 @@ test('T14532a', [], compile_and_run, ['']) test('T14532b', [], compile_and_run, ['']) test('T26507', [ when(have_profiling(), extra_ways(['prof'])) , when(js_arch(), skip) - , exit_code(1)], compile_and_run, ['']) - + , when(ghc_with_ipe(), skip) # IPE builds include an IPE backtrace section on stderr. + , exit_code(1)], compile_and_run, ['']) ===================================== rts/AllocArray.c ===================================== @@ -5,6 +5,7 @@ StgMutArrPtrs *allocateMutArrPtrs (Capability *cap, StgWord nelements, + StgClosure *init, CostCentreStack *ccs USED_IF_PROFILING) { /* All sizes in words */ @@ -25,6 +26,12 @@ StgMutArrPtrs *allocateMutArrPtrs (Capability *cap, arr->ptrs = nelements; arr->size = arrsize; + if (init != NULL) { + for (StgWord i = 0; i < nelements; ++i) { + arr->payload[i] = init; + } + } + /* Initialize the card array. Note that memset needs sizes in bytes. */ memset(&(arr->payload[nelements]), 0, mutArrPtrsCards(nelements)); @@ -33,6 +40,7 @@ StgMutArrPtrs *allocateMutArrPtrs (Capability *cap, StgSmallMutArrPtrs *allocateSmallMutArrPtrs (Capability *cap, StgWord nelements, + StgClosure *init, CostCentreStack *ccs USED_IF_PROFILING) { @@ -47,6 +55,13 @@ StgSmallMutArrPtrs *allocateSmallMutArrPtrs (Capability *cap, /* No write barrier needed since this is a new allocation. */ SET_HDR(arr, &stg_SMALL_MUT_ARR_PTRS_DIRTY_info, ccs); arr->ptrs = nelements; + + if (init != NULL) { + for (StgWord i = 0; i < nelements; ++i) { + arr->payload[i] = init; + } + } + return arr; } ===================================== rts/AllocArray.h ===================================== @@ -21,16 +21,19 @@ */ /* Allocate a StgMutArrPtrs for a given number of elements. It is allocated in - * the DIRTY state. + * the DIRTY state. If init is non-NULL, initialize payload elements to init. */ StgMutArrPtrs *allocateMutArrPtrs (Capability *cap, StgWord nelements, + StgClosure *init, CostCentreStack *ccs); -/* Allocate a StgSmallMutArrPtrs for a given number of elements. +/* Allocate a StgSmallMutArrPtrs for a given number of elements. If init is + * non-NULL, initialize payload elements to init. */ StgSmallMutArrPtrs *allocateSmallMutArrPtrs (Capability *cap, StgWord nelements, + StgClosure *init, CostCentreStack *ccs); /* Allocate a StgArrBytes for a given number of bytes. ===================================== rts/ClosureTable.c ===================================== @@ -46,7 +46,7 @@ bool enlargeClosureTable(Capability *cap, ClosureTable *t, int newcapacity) ASSERT(newcapacity > oldcapacity); StgMutArrPtrs *newarr; - newarr = allocateMutArrPtrs(cap, newcapacity, CCS_SYSTEM_OR_NULL); + newarr = allocateMutArrPtrs(cap, newcapacity, NULL, CCS_SYSTEM_OR_NULL); if (RTS_UNLIKELY(newarr == NULL)) return false; StgArrBytes *newfree; @@ -276,4 +276,3 @@ static bool isCompactClosureTable(ClosureTable *t) } return isCompact; } - ===================================== rts/Heap.c ===================================== @@ -279,7 +279,7 @@ StgMutArrPtrs *heap_view_closurePtrs(Capability *cap, StgClosure *closure) { StgClosure **ptrs = (StgClosure **) stgMallocBytes(sizeof(StgClosure *) * size, "heap_view_closurePtrs"); StgWord nptrs = collect_pointers(closure, ptrs); - StgMutArrPtrs *arr = allocateMutArrPtrs(cap, nptrs, cap->r.rCCCS); + StgMutArrPtrs *arr = allocateMutArrPtrs(cap, nptrs, NULL, cap->r.rCCCS); if (RTS_UNLIKELY(arr == NULL)) goto end; SET_INFO((StgClosure *) arr, &stg_MUT_ARR_PTRS_FROZEN_CLEAN_info); ===================================== rts/PrimOps.cmm ===================================== @@ -386,24 +386,11 @@ stg_newArrayzh ( W_ n /* words */, gcptr init ) again: MAYBE_GC(again); - ("ptr" arr) = ccall allocateMutArrPtrs(MyCapability() "ptr", n, CCCS); + ("ptr" arr) = ccall allocateMutArrPtrs(MyCapability() "ptr", n, init "ptr", CCCS); if (arr == NULL) (likely: False) { jump stg_raisezh(HsIface_heapOverflow_closure(W_[ghc_hs_iface])); } - // Initialise all elements of the array with the value init - W_ p; - p = arr + SIZEOF_StgMutArrPtrs; - // Avoid the shift for `WDS(n)` in the inner loop - W_ limit; - limit = arr + SIZEOF_StgMutArrPtrs + WDS(n); - for: - if (p < limit) (likely: True) { - W_[p] = init; - p = p + WDS(1); - goto for; - } - return (arr); } @@ -496,24 +483,11 @@ stg_newSmallArrayzh ( W_ n /* words */, gcptr init ) again: MAYBE_GC(again); - ("ptr" arr) = ccall allocateSmallMutArrPtrs(MyCapability() "ptr", n, CCCS); + ("ptr" arr) = ccall allocateSmallMutArrPtrs(MyCapability() "ptr", n, init "ptr", CCCS); if (arr == NULL) (likely: False) { jump stg_raisezh(HsIface_heapOverflow_closure(W_[ghc_hs_iface])); } - // Initialise all elements of the array with the value init - W_ p; - p = arr + SIZEOF_StgSmallMutArrPtrs; - // Avoid the shift for `WDS(n)` in the inner loop - W_ limit; - limit = arr + SIZEOF_StgSmallMutArrPtrs + WDS(n); - for: - if (p < limit) (likely: True) { - W_[p] = init; - p = p + WDS(1); - goto for; - } - return (arr); } ===================================== rts/RtsFlags.c ===================================== @@ -209,6 +209,8 @@ void initRtsFlagsDefaults(void) RtsFlags.DebugFlags.numa = false; RtsFlags.DebugFlags.compact = false; RtsFlags.DebugFlags.continuation = false; + RtsFlags.DebugFlags.iomanager = false; + RtsFlags.DebugFlags.ipe = false; #if defined(PROFILING) RtsFlags.CcFlags.doCostCentres = COST_CENTRES_NONE; @@ -482,6 +484,7 @@ usage_text[] = { #if defined(DEBUG) " -Ds DEBUG: scheduler", " -Di DEBUG: interpreter", +" -DI DEBUG: IPE", " -Dw DEBUG: weak", " -DG DEBUG: gccafs", " -Dg DEBUG: gc", @@ -2311,6 +2314,9 @@ static void read_debug_flags(const char* arg) case 'o': RtsFlags.DebugFlags.iomanager = true; break; + case 'I': + RtsFlags.DebugFlags.ipe = true; + break; default: bad_option( arg ); } ===================================== rts/Threads.c ===================================== @@ -894,7 +894,7 @@ StgMutArrPtrs *listThreads(Capability *cap) } // Allocate a suitably-sized array... - StgMutArrPtrs *arr = allocateMutArrPtrs(cap, n_threads, cap->r.rCCCS); + StgMutArrPtrs *arr = allocateMutArrPtrs(cap, n_threads, NULL, cap->r.rCCCS); if (RTS_UNLIKELY(arr == NULL)) goto end; // Populate it... ===================================== rts/Trace.c ===================================== @@ -685,7 +685,8 @@ void traceHeapProfSampleString(const char *label, StgWord residency) void traceIPE(const InfoProvEnt *ipe) { #if defined(DEBUG) - if (RtsFlags.TraceFlags.tracing == TRACE_STDERR) { + if (RtsFlags.TraceFlags.tracing == TRACE_STDERR + && RtsFlags.DebugFlags.ipe) { ACQUIRE_LOCK(&trace_utx); char closure_desc_buf[CLOSURE_DESC_BUFFER_SIZE] = {}; ===================================== rts/Weak.c ===================================== @@ -146,7 +146,7 @@ scheduleFinalizers(Capability *cap, StgWeak *list) debugTrace(DEBUG_weak, "weak: batching %d finalizers", n); - StgMutArrPtrs *arr = allocateMutArrPtrs(cap, n, CCS_SYSTEM_OR_NULL); + StgMutArrPtrs *arr = allocateMutArrPtrs(cap, n, NULL, CCS_SYSTEM_OR_NULL); if (RTS_UNLIKELY(arr == NULL)) exitHeapOverflow(); // No write barrier needed here; this array is only going to referred to by this core. SET_INFO((StgClosure *) arr, &stg_MUT_ARR_PTRS_FROZEN_CLEAN_info); ===================================== rts/include/rts/Flags.h ===================================== @@ -118,6 +118,7 @@ typedef struct _DEBUG_FLAGS { bool compact; /* 'C' */ bool continuation; /* 'k' */ bool iomanager; /* 'o' */ + bool ipe; /* 'I' */ } DEBUG_FLAGS; /* See Note [Synchronization of flags and base APIs] */ ===================================== testsuite/driver/testglobals.py ===================================== @@ -72,6 +72,10 @@ class TestConfig: # Was the compiler compiled with -debug? self.debug_rts = False + # Were the compiler + libraries built with IPE-related options + # (e.g. -finfo-table-map, -fdistinct-constructor-tables)? + self.ghc_with_ipe = False + # Was the compiler compiled with LLVM? self.ghc_built_by_llvm = False ===================================== testsuite/driver/testlib.py ===================================== @@ -1074,6 +1074,9 @@ def have_profiling( ) -> bool: def have_threaded( ) -> bool: return config.ghc_with_threaded_rts +def ghc_with_ipe( ) -> bool: + return config.ghc_with_ipe + def in_tree_compiler( ) -> bool: return config.in_tree_compiler ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout ===================================== @@ -4454,6 +4454,22 @@ module Data.Tuple.Experimental where data Unit# = ... getSolo :: forall a. Solo a -> a +module GHC.Exception.Backtrace.Experimental where + -- Safety: None + type BacktraceMechanism :: * + data BacktraceMechanism = CostCentreBacktrace | HasCallStackBacktrace | ExecutionBacktrace | IPEBacktrace + type Backtraces :: * + data Backtraces = Backtraces {btrCostCentre :: GHC.Internal.Maybe.Maybe (GHC.Internal.Ptr.Ptr GHC.Internal.Stack.CCS.CostCentreStack), btrHasCallStack :: GHC.Internal.Maybe.Maybe GHC.Internal.Stack.Types.CallStack, btrExecutionStack :: GHC.Internal.Maybe.Maybe GHC.Internal.ExecutionStack.Internal.StackTrace, btrIpe :: GHC.Internal.Maybe.Maybe GHC.Internal.Stack.CloneStack.StackSnapshot} + type CollectExceptionAnnotationMechanism :: * + data CollectExceptionAnnotationMechanism = ... + collectBacktraces :: (?callStack::GHC.Internal.Stack.Types.CallStack) => GHC.Internal.Types.IO Backtraces + collectExceptionAnnotation :: GHC.Internal.Stack.Types.HasCallStack => GHC.Internal.Types.IO GHC.Internal.Exception.Context.SomeExceptionAnnotation + displayBacktraces :: Backtraces -> GHC.Internal.Base.String + getBacktraceMechanismState :: BacktraceMechanism -> GHC.Internal.Types.IO GHC.Internal.Types.Bool + getCollectExceptionAnnotationMechanism :: GHC.Internal.Types.IO CollectExceptionAnnotationMechanism + setBacktraceMechanismState :: BacktraceMechanism -> GHC.Internal.Types.Bool -> GHC.Internal.Types.IO () + setCollectExceptionAnnotation :: forall a. GHC.Internal.Exception.Context.ExceptionAnnotation a => (GHC.Internal.Stack.Types.HasCallStack => GHC.Internal.Types.IO a) -> GHC.Internal.Types.IO () + module GHC.PrimOps where -- Safety: Unsafe (*#) :: Int# -> Int# -> Int# @@ -11182,6 +11198,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.GiveGCStats -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.IoManagerFlag -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ +instance GHC.Internal.Exception.Context.ExceptionAnnotation GHC.Internal.Exception.Backtrace.Backtraces -- Defined in ‘GHC.Internal.Exception.Backtrace’ instance forall a. GHC.Internal.Float.Floating a => GHC.Internal.Float.Floating (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Float.RealFloat a => GHC.Internal.Float.RealFloat (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Foreign.Storable.Storable a => GHC.Internal.Foreign.Storable.Storable (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ ===================================== testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32 ===================================== @@ -4454,6 +4454,22 @@ module Data.Tuple.Experimental where data Unit# = ... getSolo :: forall a. Solo a -> a +module GHC.Exception.Backtrace.Experimental where + -- Safety: None + type BacktraceMechanism :: * + data BacktraceMechanism = CostCentreBacktrace | HasCallStackBacktrace | ExecutionBacktrace | IPEBacktrace + type Backtraces :: * + data Backtraces = Backtraces {btrCostCentre :: GHC.Internal.Maybe.Maybe (GHC.Internal.Ptr.Ptr GHC.Internal.Stack.CCS.CostCentreStack), btrHasCallStack :: GHC.Internal.Maybe.Maybe GHC.Internal.Stack.Types.CallStack, btrExecutionStack :: GHC.Internal.Maybe.Maybe GHC.Internal.ExecutionStack.Internal.StackTrace, btrIpe :: GHC.Internal.Maybe.Maybe GHC.Internal.Stack.CloneStack.StackSnapshot} + type CollectExceptionAnnotationMechanism :: * + data CollectExceptionAnnotationMechanism = ... + collectBacktraces :: (?callStack::GHC.Internal.Stack.Types.CallStack) => GHC.Internal.Types.IO Backtraces + collectExceptionAnnotation :: GHC.Internal.Stack.Types.HasCallStack => GHC.Internal.Types.IO GHC.Internal.Exception.Context.SomeExceptionAnnotation + displayBacktraces :: Backtraces -> GHC.Internal.Base.String + getBacktraceMechanismState :: BacktraceMechanism -> GHC.Internal.Types.IO GHC.Internal.Types.Bool + getCollectExceptionAnnotationMechanism :: GHC.Internal.Types.IO CollectExceptionAnnotationMechanism + setBacktraceMechanismState :: BacktraceMechanism -> GHC.Internal.Types.Bool -> GHC.Internal.Types.IO () + setCollectExceptionAnnotation :: forall a. GHC.Internal.Exception.Context.ExceptionAnnotation a => (GHC.Internal.Stack.Types.HasCallStack => GHC.Internal.Types.IO a) -> GHC.Internal.Types.IO () + module GHC.PrimOps where -- Safety: Unsafe (*#) :: Int# -> Int# -> Int# @@ -11185,6 +11201,7 @@ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.DoTrace -- Defined in ‘ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.GiveGCStats -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.RTS.Flags.IoManagerFlag -- Defined in ‘GHC.Internal.RTS.Flags’ instance GHC.Internal.Enum.Enum GHC.Internal.IO.SubSystem.IoSubSystem -- Defined in ‘GHC.Internal.IO.SubSystem’ +instance GHC.Internal.Exception.Context.ExceptionAnnotation GHC.Internal.Exception.Backtrace.Backtraces -- Defined in ‘GHC.Internal.Exception.Backtrace’ instance forall a. GHC.Internal.Float.Floating a => GHC.Internal.Float.Floating (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Float.RealFloat a => GHC.Internal.Float.RealFloat (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ instance forall a. GHC.Internal.Foreign.Storable.Storable a => GHC.Internal.Foreign.Storable.Storable (GHC.Internal.Data.Ord.Down a) -- Defined in ‘GHC.Internal.Data.Ord’ ===================================== testsuite/tests/rts/Makefile ===================================== @@ -140,7 +140,7 @@ T20199: .PHONY: EventlogOutput_IPE EventlogOutput_IPE: "$(TEST_HC)" $(TEST_HC_OPTS) -debug -finfo-table-map -v0 EventlogOutput.hs - ./EventlogOutput +RTS -va 2> EventlogOutput_IPE.stderr.log + ./EventlogOutput +RTS -va -DI 2> EventlogOutput_IPE.stderr.log grep "IPE:" EventlogOutput_IPE.stderr.log .PHONY: T23142 ===================================== testsuite/tests/rts/all.T ===================================== @@ -535,6 +535,7 @@ test('T13676', test('InitEventLogging', [ only_ways(['normal']) , extra_run_opts('+RTS -RTS') + , when(ghc_with_ipe(), skip) # IPE builds can change eventlog writer call counts. , req_c ], compile_and_run, ['InitEventLogging_c.c']) @@ -588,6 +589,7 @@ test('cloneThreadStack', [req_c, only_ways(['threaded1']), extra_ways(['threaded test('decodeMyStack', [ omit_ghci, js_broken(22261) # cloneMyStack# not yet implemented + , when(ghc_with_ipe(), skip) # IPE builds can change decoded stack output. ], compile_and_run, ['-finfo-table-map']) # Options: @@ -595,6 +597,7 @@ test('decodeMyStack', test('decodeMyStack_underflowFrames', [ extra_run_opts('+RTS -kc8K -RTS') , omit_ghci, js_broken(22261) # cloneMyStack# not yet implemented + , when(ghc_with_ipe(), skip) # IPE builds can change decoded stack layout/length. ], compile_and_run, ['-finfo-table-map -rtsopts']) # -finfo-table-map intentionally missing @@ -602,6 +605,7 @@ test('decodeMyStack_emptyListForMissingFlag', [ ignore_stdout , ignore_stderr , js_broken(22261) # cloneMyStack# not yet implemented + , when(ghc_with_ipe(), skip) # IPE builds can populate IPE info even without -finfo-table-map on this module. ], compile_and_run, ['']) # Tests RTS flag parsing. Skipped on JS as it uses a distinct RTS. @@ -646,7 +650,7 @@ test('T25280', [unless(opsys('linux'),skip),req_process,js_skip], compile_and_ru test('T25560', [req_c_rts, ignore_stderr], compile_and_run, ['']) test('TestProddableBlockSet', [req_c_rts], multimod_compile_and_run, ['TestProddableBlockSet.c', '-no-hs-main']) -test('T22859', +test('T22859', [js_skip, # This test is vulnerable to changes in allocation behaviour, so we disable it in some ways when(arch('wasm32'), skip), ===================================== testsuite/tests/rts/ipe/all.T ===================================== @@ -8,7 +8,7 @@ test('ipeMap', [extra_files(['ipe_lib.c', 'ipe_lib.h']), c_src, omit_ghci], comp test('ipeEventLog', [ c_src, extra_files(['ipe_lib.c', 'ipe_lib.h']), - extra_run_opts('+RTS -va -RTS'), + extra_run_opts('+RTS -va -DI -RTS'), grep_errmsg('table_name_'), only_ways(debug_ways), normalise_errmsg_fun(noCapabilityOutputFilter), @@ -24,7 +24,7 @@ test('ipeEventLog', test('ipeEventLog_fromMap', [ c_src, extra_files(['ipe_lib.c', 'ipe_lib.h']), - extra_run_opts('+RTS -va -RTS'), + extra_run_opts('+RTS -va -DI -RTS'), grep_errmsg('table_name_'), only_ways(debug_ways), normalise_errmsg_fun(noCapabilityOutputFilter), @@ -34,4 +34,3 @@ test('ipeEventLog_fromMap', when(opsys('darwin'), fragile(0)) ], compile_and_run, ['ipe_lib.c']) - View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/ba24973bcdffb9edf196950ad1633cb... -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/ba24973bcdffb9edf196950ad1633cb... You're receiving this email because of your account on gitlab.haskell.org.
participants (1)
-
Marge Bot (@marge-bot)