[Git][ghc/ghc][wip/fendor/no-code-output-constr] 53 commits: Fix two issues in the documentation of pipeline interruption
by Hannes Siebenhandl (@fendor) 30 Jun '26
by Hannes Siebenhandl (@fendor) 30 Jun '26
30 Jun '26
Hannes Siebenhandl pushed to branch wip/fendor/no-code-output-constr at Glasgow Haskell Compiler / GHC
Commits:
f6d30767 by Wolfgang Jeltsch at 2026-06-16T15:32:34-04:00
Fix two issues in the documentation of pipeline interruption
One issue is a typo (“interreuptible”), the other one the lack of an end
of a sentence, which has been reconstructed from the message of
633bbc1fd4762a2bb73ba1c5b9e0c279f1dd3c40, the commit that introduced
said documentation.
- - - - -
a3fa10e0 by Christian Georgii at 2026-06-16T15:33:26-04:00
Find plugins in sibling home units in multiple-home-unit sessions
In a multiple-home-unit session (e.g. `cabal repl --enable-multi-repl` or HLS), enabling a plugin with -fplugin that is defined in (or reexported by) another home unit failed with a "hidden package" error. The plugin module finder only searched the current home unit and the registered external packages, never the sibling home units.
findPluginModuleNoHsc now searches the home units that the current home unit depends on, following module reexports and respecting hidden modules, exactly as ordinary import resolution does in findImportedModuleNoHsc. To avoid two divergent copies of this logic, the shared home-unit search (the current home unit first, then its dependencies in priority order, with the accompanying ordering invariant) is extracted into findHomeModuleAmongDeps, which both findImportedModuleNoHsc and findPluginModuleNoHsc now call.
Add testsuite/tests/driver/multipleHomeUnits/plugin01, which loads a plugin as byte-code from a sibling home unit, and plugin02, in which the consumer enables a plugin reexported by a sibling home unit without depending on the plugin's own home unit directly.
Fixes #27349
- - - - -
d216412b by Ian-Woo Kim at 2026-06-16T20:25:57-04:00
Make the order of usages deterministic
It has been observed that the ordering of usages can be non-determinstic
in parallel builds. Therefore, this contribution introduces sorting of
usages based on a platform- and race-independent sorting criterion.
Resolves #26877.
Co-authored-by: Wolfgang Jeltsch <wolfgang(a)well-typed.com>
- - - - -
8e1cc105 by Wolfgang Jeltsch at 2026-06-16T20:25:57-04:00
Change the descriptions of two existing changelog entries
The descriptions now describe the changes in a user-friendly manner, as
opposed to describing the contributions that led to these changes in a
developer-friendly manner.
- - - - -
636c1c7a by Ian Duncan at 2026-06-16T20:26:50-04:00
AArch64: use SXTH, not SXTW, for W32 signExtendReg
signExtendReg was using SXTH (sign-extend halfword, 16-bit) for
W32-to-W64 sign extension. This should be SXTW (sign-extend word,
32-bit). SXTH only sign-extends the lower 16 bits, producing wrong
results for 32-bit values whose bit 15 differs from bit 31.
Other fixes:
- At sub-W64, code gen for MO_S_Mul2 should use W32 registers for
SMULL source operands as per the ARM spec (SMULL Xd, Wn, Wm),
and not W64.
- Ensure signExtendReg uses the source width for the source operand
in SXTW/SXTH/SXTB instructions. GNU as requires sxtw Xd,Wn (not
sxtw Xd,Xn), while LLVM's integrated assembler on macOS is lenient.
- Fix overflow flag computation for `MO_S_Mul2`. The overflow bit
was exactly inverted for sub-W64 operands.
Fixes #26978 and #27047
- - - - -
b734c75d by Igor Ranieri at 2026-06-16T20:27:32-04:00
haddock: Update CONTRIBUTING with missing step, add missing test
dependency
- - - - -
7fe4f2ec by Luite Stegeman at 2026-06-17T05:35:09-04:00
tag inference: don't confuse functions with their return values
inferTagRhs was mixing up taggedness for closures and return values
for function closures. We really shouldn't assign TagTuple to a
properly tagged function returning a tuple.
We fix this by keeping track of functions (TagFun) separately from
values (TagVal) and keeping track of their return value. TagFun is
also used for join points.
fixes #27005
- - - - -
4671c126 by Sebastian Graf at 2026-06-17T05:35:55-04:00
Seed the simplifier's in-scope set for open expressions
simplifyExpr simplifies expressions typed at the GHCi prompt and the
results of Template Haskell splices. Such an expression may be open: at a
GHCi debugger breakpoint its free variables include RuntimeUnk skolems
standing for as-yet-unknown types.
The simplifier began with an in-scope set holding only the wildcard
binder, so when it instantiated the unsafeCoerce# wrapper that GHCi
builds around a result, it formed a substitution whose range mentioned a
free skolem that was not in scope. That breaks the substitution invariant
and, in a compiler built with assertions, trips substTy's sanity check.
Seed the initial in-scope set with the free variables of the expression.
For a closed expression this adds nothing.
See Note [Seed the in-scope set for open expressions].
Fixes #17833 and its duplicate #21118.
- - - - -
67d41299 by Sebastian Graf at 2026-06-18T05:18:24-04:00
Desugar a `case` scrutinee only once (#27383, #20251)
In `dsExpr` for `HsCase` we desugared the scrutinee /twice/: once to
build the Core `case` itself, and again inside `matchWrapper`, which
re-desugared the source scrutinee (via `addHsScrutTmCs`) purely to
record long-distance information for the pattern-match checker.
For a single `case` that is merely wasteful. But for nested cases it
is catastrophic. Consider
case (case (case e of ... ) of ... ) of ...
Desugaring the outer scrutinee desugars the middle `case` twice, each
of which desugars the inner `case` twice, and so on. The work doubles
at every level, so desugaring takes O(2^n) time in the nesting depth.
That is the blowup reported in #27383; it is also what makes the
machine-generated program in #20251 take an age to compile.
The fix is simple. `matchWrapper` is handed the scrutinee anyway, so
we give it the Core expression we have /already/ desugared, and record
the long-distance term constraint with `addCoreScrutTmCs` instead of
re-desugaring from source. This is just what `matchSinglePatVar`
already does for single-pattern matches.
So:
* `matchWrapper` now takes `Maybe [CoreExpr]` rather than
`Maybe [LHsExpr GhcTc]`.
* The `HsCase` equation of `dsExpr` passes the already-desugared
`core_discrim`; the arrow desugarer passes its match variables.
* `addHsScrutTmCs` had no other use, so it is gone.
Desugaring is now linear in the nesting depth. (The coverage checker
still runs `simpleOptExpr` over each scrutinee, which leaves the total
at O(n^2); that is ample.) The long-distance information itself is
unchanged: the checker sees precisely the Core that backs the
generated code.
Test: deSugar/should_compile/T27383
- - - - -
fa5defde by Rodrigo Mesquita at 2026-06-18T05:19:11-04:00
fix: Save FastStrings in the PMC
There is no point in adding the unique to the occurrence FastString we
create, since it is part of the Id anyway.
Adding it to the FastString, meant each FastString was unique
unnecessarily!
In a separate branch, running the compiler on test `InstanceMatching`
observed 30000 `FastString`s created by this code path.
Plus, `fsLit "pm"` follows the existing pattern in `mkPmId`.
- - - - -
4efb4a66 by Alan Zimmerman at 2026-06-18T14:41:14-04:00
TTG: Add extension points to HsConDetails
Extend HsConDetails as
data HsConDetails p arg rec
= PrefixCon !(XPrefixCon p) [arg] -- C @t1 @t2 p1 p2 p3
| RecCon !(XRecCon p) rec -- C { x = p1, y = p2 }
| InfixCon !(XInfixCon p) arg arg -- p1 `C` p2
| XHsConDetails !(XXHsConDetails p)
type family XPrefixCon p
type family XRecCon p
type family XInfixCon p
type family XXHsConDetails p
- - - - -
c8d27dd4 by Simon Jakobi at 2026-06-18T14:41:59-04:00
CI: quiet submodule clean output in after_script and setup
The clean and cleanup_submodules functions ran 'git submodule foreach
git clean -xdf', flooding the job log with 'Entering ...' and
'Removing ...' lines. Pass --quiet to 'git submodule' and -q to 'git
clean' to drop the success output; errors are still reported.
Co-Authored-By: Claude Opus 4.8 <noreply(a)anthropic.com>
- - - - -
09326ca6 by Matthew Pickering at 2026-06-20T23:41:12+02:00
Add missing req_interp modifier to T18441fail3 and T18441fail19
These tests require the interpreter but they were failing in a different
way with the javascript backend because the interpreter was disabled and
stderr is ignored by the test.
- - - - -
521e55bf by Matthew Pickering at 2026-06-20T23:41:13+02:00
hadrian: Fill in more of the default.host toolchain file
When you are building a cross compiler this file will be used to build
stage1 and it's libraries, so we need enough information here to work
accurately. There is still more work to be done (see for example, word
size is still fixed).
- - - - -
23c9b6c3 by Matthew Pickering at 2026-06-20T23:42:52+02:00
hadrian: Build stage 2 cross compilers
* Most of hadrian is abstracted over the stage in order to remove the
assumption that the target of all stages is the same platform. This
allows the RTS to be built for two different targets for example.
* Abstracts the bindist creation logic to allow building either normal
or cross bindists. Normal bindists use stage 1 libraries and a stage 2
compiler. Cross bindists use stage 2 libararies and a stage 2
compiler.
* hadrian: Make binary-dist-dir the default build target. This allows us
to have the logic in one place about which libraries/stages to build
with cross compilers. Fixes #24192
New hadrian target:
* `binary-dist-dir-cross`: Build a cross compiler bindist (compiler =
stage 1, libraries = stage 2)
This commit also contains various changes to make stage2 compilers
feasible.
-------------------------
Metric Decrease:
LinkableUsage02
ManyAlternatives
ManyConstructors
MultiComponentModulesRecomp
MultiLayerModulesRecomp
RecordUpdPerf
T10421
T12150
T12227
T12425
T12707
T13035
T13379
T13820
T15703
T16577
T18140
T18282
T18698a
T18698b
T18923
T1969
T20049
T21839c
T3294
T4801
T5030
T5321FD
T5321Fun
T5631
T5642
T6048
T783
T9020
T9198
T9233
T9630
T9872d
T9961
parsing001
T3064
Metric Increase:
T26989
hard_hole_fits
-------------------------
Co-authored-by: Sven Tennie <sven.tennie(a)gmail.com>
- - - - -
26fed8ab by Matthew Pickering at 2026-06-20T23:42:52+02:00
ci: Test cross bindists
We remove the special logic for testing in-tree cross
compilers and instead test cross compiler bindists, like we do for all
other platforms.
- - - - -
80c8910e by Matthew Pickering at 2026-06-20T23:42:52+02:00
ci: Introduce CROSS_STAGE variable
In preparation for building and testing stage3 bindists we introduce the
CROSS_STAGE variable which is used by a CI job to determine what kind of
bindist the CI job should produce.
At the moment we are only using CROSS_STAGE=2 but in the future we will
have some jobs which set CROSS_STAGE=3 to produce native bindists for a
target, but produced by a cross compiler, which can be tested on by
another CI job on the native platform.
CROSS_STAGE=2: Build a normal cross compiler bindist
CROSS_STAGE=3: Build a stage 3 bindist, one which is a native compiler and library for the target
- - - - -
8215573d by Sven Tennie at 2026-06-20T23:42:52+02:00
ci: Increase timeout for emulators
Test runs with emulators naturally take longer than on native machines.
Generate jobs.yml
- - - - -
5acb7dbc by Matthew Pickering at 2026-06-20T23:42:52+02:00
ci: Javascript don't set CROSS_EMULATOR
There is no CROSS_EMULATOR needed to run javascript binaries, so we
don't set the CROSS_EMULATOR to some dummy value.
- - - - -
48345343 by Sven Tennie at 2026-06-20T23:42:52+02:00
Javascript skip T23697
See #22355 about how HSC2HS and the Javascript target don't play well
together.
- - - - -
5e44fd05 by Sven Tennie at 2026-06-20T23:42:52+02:00
Mark T24602 as fragile
It was skipped before (due to CROSS_EMULATOR being set, which changed
for JS), so we don't make things worse by marking it as fragile.
- - - - -
ab349ec2 by Sven Tennie at 2026-06-20T23:42:52+02:00
Fix T22744 for GHCJS
In fact, this test needs Template Haskell, not necessarily an
interpreter.
- - - - -
c73352d8 by Sven Tennie at 2026-06-20T23:42:52+02:00
haddock-test: fix GHCJS haddock test failures
Add --ghc-pkg-path flag support so haddock test runner can find
cross-prefixed ghc-pkg (e.g. javascript-unknown-ghcjs-ghc-pkg) which
is not on $PATH in cross install directories.
Skip haddockHtmlTest on GHCJS: Threaded.hs uses forkOS in a TH splice,
which GHCJS RTS doesn't support. Mark with js_skip in all.T.
- - - - -
5e814e76 by Andreas Klebinger at 2026-06-22T23:00:24-04:00
compiler: Deduplicate hscTidy
This function was accidentally duplicated during a refactor.
Fixes #27351
- - - - -
473b97eb by sheaf at 2026-06-22T23:01:22-04:00
Avoid mkTick in Core Prep breaking ANF (part II)
Hotfix for 2f9579765f55b3920ceb2e04995ff41a9d0e2d4e fixing a small
oversight in the call to tickTickedExpr from mkTick, in which we
improperly recursively called mkTick without passing on the preserve_anf
flag.
Fixes #27386
- - - - -
9284a1f7 by Simon Hengel at 2026-06-23T05:55:33-04:00
Don't use global variables to address concurrency bugs! (fixes #27234)
This was originally introduce with
88f38b03025386f0f1e8f5861eed67d80495168a to address #17922.
In this specific case a better fix would have been to synchronize on
stderr:
withHandle_ "stderrSupportsAnsiColors" stderr $ \ _ -> do
...
But apparently the dependency on `terminfo` was removed in
32ab07bf3d6ce45e8ea5b55e8095174a6b42a7f0, preventing #17922 in the first
place.
- - - - -
44309cd3 by Alan Zimmerman at 2026-06-23T05:56:20-04:00
EPA: remove LocatedL / SrcSpanAnnL and LocatedLI / SrcSpanAnnLI
This is part of a refactor towards only having LocatedA / SrcSpanAnnA
It removes the stated items, but has to add back one for BooleanFormula,
LocatedBF / SrcSpanAnnBF
This commit also use the HsConDetails RecCon extension point to
capture the braces in a record constructor
- - - - -
2f6a5534 by Simon Jakobi at 2026-06-23T15:46:20+02:00
Add -dstable-core-dump-order for stable Core dump ordering (#27296)
The order of top-level bindings in Core dumps (-ddump-simpl etc.) is the
compiler's Unique-sensitive internal processing order, so an unrelated
upstream change can reorder them and defeat a textual diff of two dumps.
This adds an opt-in flag -dstable-core-dump-order that reorders the
top-level bindings of dumps routed through dumpPassResult into a stable,
Unique-independent order, so two dumps line up across rebuilds. See
Note [Stable Core dump order] in GHC.Core.Ppr for the sort key and its
rationale.
Adds tests T27296 (binders GHC emits in non-source order by default,
asserted to come out stably ordered under the flag) and T27296b (an
untidied -ddump-float-out dump pinning the ordering of the anonymous lvl
floats by literal value).
Co-Authored-By: Claude Opus 4.8 <noreply(a)anthropic.com>
- - - - -
141986e3 by mangoiv at 2026-06-24T15:51:14-04:00
compiler: refactor error reporting code for ExplicitLevelImports
Refactors error reporting code for ExplicitLevelImports to pass in a
RdrName and a GlobalReaderElt to be able to report errors that are
faithful to the source and to more precisely distinguish between names
that are in scope from different qualifications.
Fixes #27385 and #26616
- - - - -
aa7df6b6 by Simon Hengel at 2026-06-24T15:52:18-04:00
Set GHC_VERSION when calling custom pre-processors (see #25952)
(so that pre-processors can emit backwards compatible code)
- - - - -
a9e494f2 by Simon Hengel at 2026-06-24T15:54:08-04:00
Add a flag to control GHCi specific error hints (close #27409)
- - - - -
a805b2a2 by Simon Hengel at 2026-06-24T15:55:20-04:00
Reference correct package in error messages for reexported modules
(fixes #27417)
- - - - -
f235d183 by Simon Jakobi at 2026-06-25T05:51:18-04:00
Add explicit setBit/clearBit/complementBit for instance Bits Integer (#21176)
The default setBit, clearBit, and complementBit methods allocate
intermediate Integers per call. Define them explicitly via the new
integerSetBit[#], integerClearBit[#] and integerComplementBit[#], built
on the BigNat# primitives, which avoid those allocations. Allocation is not
eliminated entirely -- the negative (IN) cases would need in-place mutation,
which is left as future work.
The default methods constant-folded on literal arguments via the
integerOr/integerAnd/integerXor rules, which fold literal Integers of any
size. The explicit functions have no such rule, so they (their Word-argument
wrappers, and the Bits Integer methods) are marked INLINE to expose the
underlying primops to the simplifier; see Note [INLINE for constant folding
of bit operations]. This restores folding only on the small-int (IS) path --
large literal Integers (IP/IN) are no longer constant-folded, a minor
regression for that case. T8832 covers the IS-path folding.
The new golden-output test T21176 checks all three operations against the
default implementations across the sign/size boundaries, recording each
result plus its integerCheck validity. The base and ghc-bignum interface-
stability export goldens gain the new functions.
The main changelog entry lives in changelog.d under a new ghc-internal
section (renamed from ghc-prim).
CLC proposal: https://github.com/haskell/core-libraries-committee/issues/423
Co-Authored-By: Claude Opus 4.7 <noreply(a)anthropic.com>
- - - - -
202ed264 by Marc Scholten at 2026-06-25T05:52:21-04:00
haddock: use Text in documentation pipeline
This patch moves Haddock's documentation pipeline from String to Text
where the data is already textual. It avoids repeated conversions while
keeping the existing decoding behavior for invalid UTF-8 docstring
chunks.
The main changes are:
* Render and carry docstrings as Text in Haddock-facing paths.
* Use the Binary Text instance from GHC.Utils.Binary for Haddock
interface files, and bump the Haddock binary interface version.
* Add a FastString HTML instance so XHTML rendering avoids
intermediate String allocation.
* Keep HsDocStringChunk decoding lenient, matching the previous
unpackHDSC behavior on invalid UTF-8 input.
* Update the xhtml submodule to 3000.4.1.0, which contains the
apostrophe escaping fix used by the Haddock test output.
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot(a)users.noreply.github.com>
Co-authored-by: Claude Opus 4.5 <noreply(a)anthropic.com>
Assisted-by: Codex <codex(a)openai.com>
- - - - -
a72ff58f by mangoiv at 2026-06-25T05:53:07-04:00
compiler: rename ZonkAny to UnusedType and add pretty printing logic
ZonkAny is a hard to understand name for users who do not know how the
compiler works internally. Additionally, it is confusing that ZonkAny,
while being a concrete type *represents* a meta variable, espeically in
the compiler output.
This patch changes the name of ZonkAny to UnusedType which is closer to
its intended semantics and adds special pretty printing logic to display
this type in the same fashion the compiler displays meta variables in
other places, whenever they leak from the implementation to the user.
It also exports the type from ghc-internal:GHC.Internal.Types in order
to expose documentation.
Fixes #27390
Co-Authored-By: Sam Derbyshire <sam.derbyshire(a)gmail.com>
- - - - -
6813f002 by Simon Jakobi at 2026-06-26T04:51:47-04:00
Reg.Linear: drop Platform argument from most FR (FreeRegs) methods
The FR class has one instance per CPU architecture, so any
architecture-constant information its methods derived from the Platform
argument can instead be baked into the instance. This removes the now
needless Platform argument from frAllocateReg, frGetFreeRegs and
frReleaseReg.
frInitFreeRegs keeps its Platform argument: the initial allocatable set is
genuinely platform-dependent, see Note [Aarch64 Register x18 at Darwin and
Windows].
Fixes #26665
Co-Authored-By: Claude Opus 4.8 <noreply(a)anthropic.com>
- - - - -
3b2a9409 by Zubin Duggal at 2026-06-26T04:52:39-04:00
testsuite: Report fragile failures as skipped in JUnit output
- - - - -
27463426 by Rodrigo Mesquita at 2026-06-26T20:54:58-04:00
perf: Share Module in Iface Symbol Table
This commit modifies the structure of the serialized `SymbolTable Name`
to then re-use and share the `Module` (both on disk and in memory) across
all `Name`s from the same module.
The new structure looks like:
<total name count>
$modules.size
for (mod, names) in $modules:
$mod
$names.size
for table_ix, occ in $names
$table_ix
$occ
i.e. we put the module just once, followed by all names in that module.
When deserializing, we deserialize the module just once, and all the
following `Name`s are constructed with a pointer to that same decoded
`Module`.
In `hoogle-test`, we must use `DNameEnv` rather than `Map Name`,
otherwise the output fixities order was susceptible to changes in the
uniques assigned to each Names, which is not stable.
Fixes #27401
-------------------------
Metric Decrease:
InstanceMatching
LinkableUsage01
LinkableUsage02
hard_hole_fits
-------------------------
- - - - -
412f1675 by Simon Hengel at 2026-06-26T20:55:41-04:00
Rename `MCDiagnostic` to `InternalMCDiagnostic`
`MCDiagnostic` is meant to be used for compiler diagnostics.
Any code that creates `MCDiagnostic` directly, without going through
`GHC.Driver.Errors.printMessage`, sidesteps `-fdiagnostics-as-json` (see
e.g. !14616, !14475, !14492 !14548).
To avoid this in the future, this change more narrowly controls who
creates `MCDiagnostic` (see #24113).
- - - - -
6f212121 by Facundo Domínguez at 2026-06-26T20:56:27-04:00
Encapsulate options of occurAnalysePgm in a record
- - - - -
adfbb179 by Facundo Domínguez at 2026-06-26T20:56:27-04:00
Allow to configure the occurrence analyser to retain some dead bindings
This is needed by plugins that are the only consumers of a binding which
is otherwise unused in the program.
See Note [Controlling elimination of dead bindings in occurrence analysis]
added in this commit, or
https://gitlab.haskell.org/ghc/ghc/-/issues/27240 for more discussion.
- - - - -
c745b11f by Copilot at 2026-06-26T20:56:27-04:00
Address documentation feedback
- - - - -
2c2a4a2a by Copilot at 2026-06-26T20:56:27-04:00
Keep the imp_rules parameter of occurPgmAnalysePgm and add occ_opts to OccEnv
- - - - -
e2262b0e by Copilot at 2026-06-26T20:56:27-04:00
Strengthen T27240.hs with a binding that should be removed
- - - - -
5f9d9268 by Copilot at 2026-06-26T20:56:27-04:00
Move the reference #27240 to a related paragraph
- - - - -
d86d2644 by Simon Hengel at 2026-06-26T20:57:10-04:00
Remove deprecated flag `-ddump-json` (see #24113)
This was first deprecated in 9.10.1.
- - - - -
3b15ff03 by Simon Jakobi at 2026-06-27T18:48:34+02:00
Tweak mk_mod_usage_info
* Use O(log n) `elemModuleEnv` instead of O(n) `elem` to filter the
direct imports.
* Use `nonDetModuleEnvKeys` to avoid sorting the ent_map keys twice.
* Prepend the presumably shorter list when creating all_mods with
`(++)`. Actually this eliminates the `(++)` entirely, as it seems to
fuse with the `filter` expression.
As a result there is a tiny speed-up when generating the .hi-files for
modules with many imports.
None of the changes affect compilation determinism as the module list
is explicitly sorted to ensure a canonical order.
- - - - -
2d0fd154 by Alan Zimmerman at 2026-06-29T11:44:00-04:00
EPA: Remove LocatedC / SrcSpanAnnC
This is part of a cleanup of the zoo of
SrcSpanAnnXXX types for exact print annotations.
This one removes SrcSpanAnnC used for storing exact print annotations
for contexts. It replaces it with an explicit `HsContext` data type
that carries the annotations and the context.
So, replace
type HsContext pass = [LHsType pass]
with
type HsContext pass = HsContextDetails pass (LHsType pass)
data HsContextDetails pass arg
= HsContext
{ hsc_ext :: !(XHsContext pass)
, hsc_ctxt :: [arg]
}
| XHsContextDetails !(XXHsContextDetails pass)
We need the parameterised HsContextDetails because it is used both for
HsQual carrying 'LHsExpr p' and "normal" contexts carrying 'LHsType p'.
- - - - -
29246da9 by fendor at 2026-06-30T16:40:13+02:00
Add 'backendSupportsInfoTableMap' backend predicate
Check whether the backend supports the `-finfo-table-map` flag and
ignore it otherwise.
- - - - -
11f7893d by Matthew Pickering at 2026-06-30T16:40:13+02:00
Add failing test for `-finfo-table-map` and bytecode backend
If you compile a module using the bytecode backend, with
-finfo-table-map, then the info table map doesn't get populated for the
module.
This is because the -finfo-table-map code path is implemented mostly in
the StgToCmm phase which isn't run when creating bytecode.
Ticket #27039
- - - - -
a34b8936 by Rodrigo Mesquita at 2026-06-30T16:40:13+02:00
Improve by-design documentation of backendCodeOutput
`Backend` is **abstract by design**. Make this clearer in
`backendCodeOutput` which is incorrectly being used as a proxy for
`Backend`.
Instead, define the desired property predicates in GHC.Driver.Backend
In the process, make `backendCodeOutput` total.
- - - - -
965aa38b by fendor at 2026-06-30T16:40:13+02:00
WIP
- - - - -
ce7b75a4 by fendor at 2026-06-30T16:40:14+02:00
Move warning message into 'backendSupportsInfoTableMap'
- - - - -
436 changed files:
- .gitlab-ci.yml
- .gitlab/ci.sh
- .gitlab/generate-ci/gen_ci.hs
- .gitlab/jobs.yaml
- + changelog.d/26616
- + changelog.d/T17833
- + changelog.d/T21176
- + changelog.d/T26978
- + changelog.d/T27047
- + changelog.d/T27386
- + changelog.d/add_can_drop_to_occurence_analyser
- changelog.d/config
- + changelog.d/deterministic-usage-order
- + changelog.d/fix-exponential-case-desugar-27383
- + changelog.d/fix-plugin-finder-multi-home-unit.md
- + changelog.d/interactive-error-hints
- changelog.d/module-graph-reuse-in-downsweep
- changelog.d/more-efficient-home-unit-imports-finding
- + changelog.d/pp-set-ghc-version
- + changelog.d/reexported-module-errors
- + changelog.d/remove-ddump-json-flag
- + changelog.d/stable-core-dump-order-27296
- + changelog.d/stage2-cross-compilers
- + changelog.d/tag-inference-27005
- + changelog.d/unused-type
- compiler/GHC/Builtin/Names.hs
- compiler/GHC/Builtin/Types.hs
- compiler/GHC/CmmToAsm/AArch64/CodeGen.hs
- compiler/GHC/CmmToAsm/AArch64/Instr.hs
- compiler/GHC/CmmToAsm/AArch64/Ppr.hs
- compiler/GHC/CmmToAsm/Reg/Linear.hs
- compiler/GHC/CmmToAsm/Reg/Linear/FreeRegs.hs
- compiler/GHC/CmmToAsm/Reg/Linear/JoinToTargets.hs
- compiler/GHC/CmmToAsm/Reg/Linear/X86.hs
- compiler/GHC/CmmToAsm/Reg/Linear/X86_64.hs
- compiler/GHC/CmmToAsm/X86/RegInfo.hs
- compiler/GHC/CmmToAsm/X86/Regs.hs
- compiler/GHC/Core/Lint.hs
- compiler/GHC/Core/Opt/Arity.hs
- compiler/GHC/Core/Opt/OccurAnal.hs
- compiler/GHC/Core/Opt/Simplify.hs
- compiler/GHC/Core/Ppr.hs
- compiler/GHC/Core/SimpleOpt.hs
- compiler/GHC/Core/Utils.hs
- compiler/GHC/Data/BooleanFormula.hs
- compiler/GHC/Driver/Backend.hs
- compiler/GHC/Driver/CodeOutput.hs
- compiler/GHC/Driver/Config.hs
- compiler/GHC/Driver/DynFlags.hs
- compiler/GHC/Driver/Errors.hs
- compiler/GHC/Driver/Flags.hs
- compiler/GHC/Driver/Main/Compile.hs
- compiler/GHC/Driver/Main/Interactive.hs
- compiler/GHC/Driver/Main/Passes.hs
- compiler/GHC/Driver/Main/Passes.hs-boot
- compiler/GHC/Driver/Pipeline.hs
- compiler/GHC/Driver/Session.hs
- compiler/GHC/Hs.hs
- compiler/GHC/Hs/Binds.hs
- compiler/GHC/Hs/Decls.hs
- compiler/GHC/Hs/DocString.hs
- compiler/GHC/Hs/Dump.hs
- compiler/GHC/Hs/Expr.hs
- compiler/GHC/Hs/ImpExp.hs
- compiler/GHC/Hs/Instances.hs
- compiler/GHC/Hs/Pat.hs
- compiler/GHC/Hs/Stats.hs
- compiler/GHC/Hs/Type.hs
- compiler/GHC/Hs/Utils.hs
- compiler/GHC/HsToCore/Arrows.hs
- compiler/GHC/HsToCore/Docs.hs
- compiler/GHC/HsToCore/Expr.hs
- compiler/GHC/HsToCore/Match.hs
- compiler/GHC/HsToCore/Match.hs-boot
- compiler/GHC/HsToCore/Match/Constructor.hs
- compiler/GHC/HsToCore/Monad.hs
- compiler/GHC/HsToCore/Pmc.hs
- compiler/GHC/HsToCore/Pmc/Desugar.hs
- compiler/GHC/HsToCore/Pmc/Solver.hs
- compiler/GHC/HsToCore/Quote.hs
- compiler/GHC/HsToCore/Ticks.hs
- compiler/GHC/HsToCore/Usage.hs
- compiler/GHC/Iface/Binary.hs
- compiler/GHC/Iface/Errors.hs
- compiler/GHC/Iface/Errors/Ppr.hs
- compiler/GHC/Iface/Errors/Types.hs
- compiler/GHC/Iface/Ext/Ast.hs
- compiler/GHC/Iface/Type.hs
- compiler/GHC/Parser.y
- compiler/GHC/Parser/Annotation.hs
- compiler/GHC/Parser/PostProcess.hs
- compiler/GHC/Parser/PostProcess/Haddock.hs
- compiler/GHC/Rename/Bind.hs
- compiler/GHC/Rename/Env.hs
- compiler/GHC/Rename/Expr.hs
- compiler/GHC/Rename/HsType.hs
- compiler/GHC/Rename/Module.hs
- compiler/GHC/Rename/Names.hs
- compiler/GHC/Rename/Pat.hs
- compiler/GHC/Rename/Splice.hs
- compiler/GHC/Rename/Splice.hs-boot
- compiler/GHC/Rename/Unbound.hs
- compiler/GHC/Rename/Utils.hs
- compiler/GHC/Stg/EnforceEpt.hs
- compiler/GHC/Stg/EnforceEpt/Rewrite.hs
- compiler/GHC/Stg/EnforceEpt/TagSig.hs
- compiler/GHC/Stg/EnforceEpt/Types.hs
- compiler/GHC/SysTools/Tasks.hs
- compiler/GHC/SysTools/Terminal.hs
- compiler/GHC/Tc/Deriv.hs
- compiler/GHC/Tc/Deriv/Generate.hs
- compiler/GHC/Tc/Errors.hs
- compiler/GHC/Tc/Errors/Ppr.hs
- compiler/GHC/Tc/Errors/Types.hs
- compiler/GHC/Tc/Gen/App.hs
- compiler/GHC/Tc/Gen/Export.hs
- compiler/GHC/Tc/Gen/HsType.hs
- compiler/GHC/Tc/Gen/Pat.hs
- compiler/GHC/Tc/Gen/Sig.hs
- compiler/GHC/Tc/Module.hs
- compiler/GHC/Tc/TyCl.hs
- compiler/GHC/Tc/TyCl/PatSyn.hs
- compiler/GHC/Tc/TyCl/Utils.hs
- compiler/GHC/Tc/Types.hs
- compiler/GHC/Tc/Utils/Backpack.hs
- compiler/GHC/Tc/Utils/Env.hs
- compiler/GHC/Tc/Utils/Monad.hs
- compiler/GHC/Tc/Utils/TcType.hs
- compiler/GHC/Tc/Zonk/Type.hs
- compiler/GHC/ThToHs.hs
- compiler/GHC/Types/Error.hs
- − compiler/GHC/Types/Error.hs-boot
- compiler/GHC/Types/Hint/Ppr.hs
- compiler/GHC/Types/Name/Reader.hs
- compiler/GHC/Types/SourceError.hs
- compiler/GHC/Unit/Finder.hs
- compiler/GHC/Unit/Finder/Types.hs
- compiler/GHC/Unit/Module/Deps.hs
- compiler/GHC/Unit/Module/Env.hs
- compiler/GHC/Unit/State.hs
- compiler/GHC/Utils/Error.hs
- compiler/GHC/Utils/Logger.hs
- compiler/GHC/Utils/Outputable.hs
- compiler/Language/Haskell/Syntax.hs
- compiler/Language/Haskell/Syntax/Binds.hs
- compiler/Language/Haskell/Syntax/Decls.hs
- compiler/Language/Haskell/Syntax/Expr.hs
- compiler/Language/Haskell/Syntax/ImpExp.hs
- compiler/Language/Haskell/Syntax/Pat.hs
- compiler/Language/Haskell/Syntax/Type.hs
- configure.ac
- distrib/configure.ac.in
- docs/users_guide/debugging.rst
- docs/users_guide/ghci.rst
- docs/users_guide/phases.rst
- ghc/GHCi/UI.hs
- ghc/GHCi/UI/Exception.hs
- ghc/Main.hs
- hadrian/README.md
- hadrian/bindist/config.mk.in
- hadrian/cfg/default.host.target.in
- + hadrian/cfg/system.config.host.in
- hadrian/cfg/system.config.in
- + hadrian/cfg/system.config.target.in
- hadrian/hadrian.cabal
- hadrian/src/Base.hs
- + hadrian/src/BindistConfig.hs
- hadrian/src/Builder.hs
- hadrian/src/Context.hs
- hadrian/src/Expression.hs
- hadrian/src/Flavour.hs
- hadrian/src/Flavour/Type.hs
- hadrian/src/Hadrian/Builder.hs
- hadrian/src/Hadrian/Haskell/Hash.hs
- hadrian/src/Hadrian/Oracles/TextFile.hs
- hadrian/src/Main.hs
- hadrian/src/Oracles/Flag.hs
- hadrian/src/Oracles/Flavour.hs
- hadrian/src/Oracles/Setting.hs
- hadrian/src/Oracles/TestSettings.hs
- hadrian/src/Packages.hs
- hadrian/src/Rules.hs
- hadrian/src/Rules/BinaryDist.hs
- hadrian/src/Rules/CabalReinstall.hs
- hadrian/src/Rules/Changelog.hs
- hadrian/src/Rules/Compile.hs
- hadrian/src/Rules/Documentation.hs
- hadrian/src/Rules/Generate.hs
- hadrian/src/Rules/Gmp.hs
- hadrian/src/Rules/Library.hs
- hadrian/src/Rules/Program.hs
- hadrian/src/Rules/Register.hs
- hadrian/src/Rules/Rts.hs
- hadrian/src/Rules/Test.hs
- hadrian/src/Settings.hs
- hadrian/src/Settings/Builders/Cabal.hs
- hadrian/src/Settings/Builders/Common.hs
- hadrian/src/Settings/Builders/Configure.hs
- hadrian/src/Settings/Builders/DeriveConstants.hs
- hadrian/src/Settings/Builders/Ghc.hs
- hadrian/src/Settings/Builders/Hsc2Hs.hs
- hadrian/src/Settings/Builders/RunTest.hs
- hadrian/src/Settings/Builders/SplitSections.hs
- hadrian/src/Settings/Default.hs
- hadrian/src/Settings/Flavours/GhcInGhci.hs
- hadrian/src/Settings/Flavours/Performance.hs
- hadrian/src/Settings/Flavours/QuickCross.hs
- hadrian/src/Settings/Packages.hs
- hadrian/src/Settings/Program.hs
- hadrian/src/Settings/Warnings.hs
- libraries/base/changelog.md
- libraries/base/src/GHC/Base.hs
- libraries/base/src/GHC/Exts.hs
- libraries/base/tests/all.T
- libraries/ghc-bignum/changelog.md
- libraries/ghc-experimental/src/GHC/PrimOps.hs
- libraries/ghc-internal/src/GHC/Internal/Bignum/Integer.hs
- libraries/ghc-internal/src/GHC/Internal/Bits.hs
- libraries/ghc-internal/src/GHC/Internal/Types.hs
- libraries/xhtml
- m4/fp_find_nm.m4
- m4/prep_target_file.m4
- testsuite/driver/junit.py
- testsuite/ghc-config/ghc-config.hs
- testsuite/tests/annotations/should_fail/annfail03.stderr
- testsuite/tests/annotations/should_fail/annfail04.stderr
- testsuite/tests/annotations/should_fail/annfail06.stderr
- testsuite/tests/annotations/should_fail/annfail09.stderr
- + testsuite/tests/codeGen/should_gen_asm/aarch64-sxth-mul2.asm
- + testsuite/tests/codeGen/should_gen_asm/aarch64-sxth-mul2.cmm
- + testsuite/tests/codeGen/should_gen_asm/aarch64-sxtw.asm
- + testsuite/tests/codeGen/should_gen_asm/aarch64-sxtw.cmm
- testsuite/tests/codeGen/should_gen_asm/all.T
- + testsuite/tests/codeGen/should_run/aarch64-sxtw-cmm.cmm
- + testsuite/tests/codeGen/should_run/aarch64-sxtw-run.hs
- + testsuite/tests/codeGen/should_run/aarch64-sxtw-run.stdout
- testsuite/tests/codeGen/should_run/all.T
- testsuite/tests/core-to-stg/T14895.stderr
- + testsuite/tests/deSugar/should_compile/T27383.hs
- testsuite/tests/deSugar/should_compile/all.T
- testsuite/tests/driver/T16167.stderr
- − testsuite/tests/driver/T16167.stdout
- testsuite/tests/driver/all.T
- testsuite/tests/driver/json2.stderr
- − testsuite/tests/driver/json_dump.hs
- − testsuite/tests/driver/json_dump.stderr
- + testsuite/tests/driver/multipleHomeUnits/plugin01/all.T
- + testsuite/tests/driver/multipleHomeUnits/plugin01/appunit
- + testsuite/tests/driver/multipleHomeUnits/plugin01/p/MyPlugin.hs
- + testsuite/tests/driver/multipleHomeUnits/plugin01/pluginunit
- + testsuite/tests/driver/multipleHomeUnits/plugin01/q/App.hs
- + testsuite/tests/driver/multipleHomeUnits/plugin02/all.T
- + testsuite/tests/driver/multipleHomeUnits/plugin02/appunit
- + testsuite/tests/driver/multipleHomeUnits/plugin02/p/MyPlugin.hs
- + testsuite/tests/driver/multipleHomeUnits/plugin02/pluginunit
- + testsuite/tests/driver/multipleHomeUnits/plugin02/q/App.hs
- + testsuite/tests/driver/multipleHomeUnits/plugin02/r/RexLib.hs
- + testsuite/tests/driver/multipleHomeUnits/plugin02/reexportunit
- testsuite/tests/ghc-api/T25121_status.stdout
- + testsuite/tests/ghc-api/T27240.hs
- testsuite/tests/ghc-api/all.T
- testsuite/tests/ghc-api/exactprint/T22919.stderr
- testsuite/tests/ghc-api/exactprint/Test20239.stderr
- testsuite/tests/ghc-api/exactprint/ZeroWidthSemi.stderr
- testsuite/tests/ghc-e/should_fail/all.T
- testsuite/tests/ghci.debugger/scripts/all.T
- testsuite/tests/ghci/prog-mhu002/prog-mhu002c.stdout
- testsuite/tests/ghci/scripts/all.T
- + testsuite/tests/ghci/scripts/bytecodeIPE.hs
- + testsuite/tests/ghci/scripts/bytecodeIPE.script
- + testsuite/tests/ghci/scripts/bytecodeIPE.stdout
- testsuite/tests/ghci/scripts/ghci024.stdout
- testsuite/tests/ghci/scripts/ghci024.stdout-mingw32
- testsuite/tests/haddock/haddock_testsuite/Makefile
- testsuite/tests/haddock/haddock_testsuite/all.T
- testsuite/tests/haddock/should_compile_flag_haddock/T17544.stderr
- testsuite/tests/haddock/should_compile_flag_haddock/T17544_kw.stderr
- testsuite/tests/haddock/should_compile_flag_haddock/T24221.stderr
- testsuite/tests/interface-stability/ghc-bignum-exports.stdout
- testsuite/tests/interface-stability/ghc-prim-exports.stdout
- testsuite/tests/interface-stability/ghc-prim-exports.stdout-mingw32
- testsuite/tests/javascript/closure/all.T
- testsuite/tests/module/mod185.stderr
- + testsuite/tests/numeric/should_run/T21176.hs
- + testsuite/tests/numeric/should_run/T21176.stdout
- + testsuite/tests/numeric/should_run/T21176.stdout-ws-32
- testsuite/tests/numeric/should_run/all.T
- testsuite/tests/overloadedrecflds/should_compile/DRFPatSynExport.stdout
- + testsuite/tests/package/ImportReexport.hs
- + testsuite/tests/package/ImportReexport.stderr
- testsuite/tests/package/all.T
- testsuite/tests/parser/should_compile/DumpParsedAst.stderr
- testsuite/tests/parser/should_compile/DumpParsedAstComments.stderr
- testsuite/tests/parser/should_compile/DumpRenamedAst.stderr
- testsuite/tests/parser/should_compile/DumpSemis.stderr
- testsuite/tests/parser/should_compile/KindSigs.stderr
- testsuite/tests/parser/should_compile/T14189.stderr
- testsuite/tests/parser/should_compile/T15323.stderr
- testsuite/tests/parser/should_compile/T20452.stderr
- testsuite/tests/parser/should_compile/T20718.stderr
- testsuite/tests/parser/should_compile/T20718b.stderr
- testsuite/tests/parser/should_compile/T20846.stderr
- testsuite/tests/parser/should_compile/T23315/T23315.stderr
- testsuite/tests/perf/compiler/T11068.stdout
- testsuite/tests/perf/compiler/all.T
- testsuite/tests/pmcheck/should_compile/T12957.stderr
- testsuite/tests/printer/AnnotationNoListTuplePuns.stdout
- testsuite/tests/printer/T18791.stderr
- testsuite/tests/printer/Test10309.hs
- testsuite/tests/printer/Test20297.stdout
- testsuite/tests/printer/Test24533.stdout
- + testsuite/tests/profiling/should_compile/T27386.hs
- testsuite/tests/profiling/should_compile/all.T
- testsuite/tests/profiling/should_run/staticcallstack002.stdout
- testsuite/tests/quasiquotation/qq001/qq001.stderr
- testsuite/tests/quasiquotation/qq002/qq002.stderr
- testsuite/tests/quasiquotation/qq003/qq003.stderr
- testsuite/tests/quasiquotation/qq004/qq004.stderr
- testsuite/tests/quotes/LiftErrMsg.stderr
- testsuite/tests/quotes/LiftErrMsgDefer.stderr
- testsuite/tests/quotes/LiftErrMsgTyped.stderr
- testsuite/tests/quotes/T10384.stderr
- testsuite/tests/quotes/T5721.stderr
- testsuite/tests/quotes/TH_localname.stderr
- testsuite/tests/rename/should_compile/T1792_imports.stdout
- testsuite/tests/rename/should_compile/T18264.stdout
- testsuite/tests/rename/should_compile/T4239.stdout
- testsuite/tests/showIface/DocsInHiFile1.stdout
- testsuite/tests/showIface/DocsInHiFileTH.stdout
- testsuite/tests/showIface/NoExportList.stdout
- testsuite/tests/simplCore/should_compile/Makefile
- testsuite/tests/simplCore/should_compile/T13156.stdout
- testsuite/tests/simplCore/should_compile/T26615.stderr
- + testsuite/tests/simplCore/should_compile/T27296.hs
- + testsuite/tests/simplCore/should_compile/T27296.stdout
- + testsuite/tests/simplCore/should_compile/T27296b.hs
- + testsuite/tests/simplCore/should_compile/T27296b.stdout
- testsuite/tests/simplCore/should_compile/T4201.stdout
- testsuite/tests/simplCore/should_compile/T8832.hs
- testsuite/tests/simplCore/should_compile/T8832.stdout
- testsuite/tests/simplCore/should_compile/all.T
- + testsuite/tests/simplCore/should_run/T27005.hs
- + testsuite/tests/simplCore/should_run/T27005.stdout
- + testsuite/tests/simplCore/should_run/T27005_aux.hs
- testsuite/tests/simplCore/should_run/all.T
- testsuite/tests/simplStg/should_compile/T24806.hs
- testsuite/tests/simplStg/should_compile/T24806.stderr
- + testsuite/tests/simplStg/should_compile/T27005b.hs
- + testsuite/tests/simplStg/should_compile/T27005b.stderr
- testsuite/tests/simplStg/should_compile/all.T
- testsuite/tests/simplStg/should_compile/inferTags004.hs
- testsuite/tests/simplStg/should_compile/inferTags004.stderr
- + testsuite/tests/simplStg/should_run/T27005a.hs
- + testsuite/tests/simplStg/should_run/T27005a.stdout
- testsuite/tests/simplStg/should_run/all.T
- testsuite/tests/splice-imports/SI03.stderr
- testsuite/tests/splice-imports/SI05.stderr
- testsuite/tests/splice-imports/SI08.stderr
- testsuite/tests/splice-imports/SI08_oneshot.stderr
- testsuite/tests/splice-imports/SI16.stderr
- testsuite/tests/splice-imports/SI18.stderr
- testsuite/tests/splice-imports/SI20.stderr
- testsuite/tests/splice-imports/SI25.stderr
- testsuite/tests/splice-imports/SI28.stderr
- testsuite/tests/splice-imports/SI29.stderr
- testsuite/tests/splice-imports/SI31.stderr
- testsuite/tests/splice-imports/SI36.stderr
- testsuite/tests/splice-imports/T26088.stderr
- testsuite/tests/splice-imports/T26090.stderr
- + testsuite/tests/splice-imports/T26616.hs
- + testsuite/tests/splice-imports/T26616.stderr
- testsuite/tests/splice-imports/all.T
- testsuite/tests/th/T16976z.stderr
- testsuite/tests/th/T17820a.stderr
- testsuite/tests/th/T17820b.stderr
- testsuite/tests/th/T17820c.stderr
- testsuite/tests/th/T17820d.stderr
- testsuite/tests/th/T17820e.stderr
- testsuite/tests/th/T21547.stderr
- testsuite/tests/th/T23829_hasty.stderr
- testsuite/tests/th/T23829_hasty_b.stderr
- testsuite/tests/th/T23829_tardy.ghc.stderr
- testsuite/tests/th/T26098_local.stderr
- testsuite/tests/th/T26098_quote.stderr
- testsuite/tests/th/T26098_splice.stderr
- testsuite/tests/th/T26099.stderr
- testsuite/tests/th/T26568.stderr
- testsuite/tests/th/T5795.stderr
- testsuite/tests/typecheck/should_compile/subsumption_sort_hole_fits.stderr
- testsuite/tests/typecheck/should_fail/T13292.stderr
- + testsuite/tests/typecheck/should_fail/T27390-explicit-kinds.stderr
- + testsuite/tests/typecheck/should_fail/T27390.hs
- + testsuite/tests/typecheck/should_fail/T27390.stderr
- + testsuite/tests/typecheck/should_fail/T27390a.hs
- testsuite/tests/typecheck/should_fail/all.T
- utils/check-exact/ExactPrint.hs
- utils/check-exact/Main.hs
- utils/check-exact/Preprocess.hs
- utils/check-exact/Utils.hs
- utils/haddock/CONTRIBUTING.md
- utils/haddock/haddock-api/src/Haddock.hs
- utils/haddock/haddock-api/src/Haddock/Backends/Hoogle.hs
- utils/haddock/haddock-api/src/Haddock/Backends/Hyperlinker.hs
- utils/haddock/haddock-api/src/Haddock/Backends/Hyperlinker/Parser.hs
- utils/haddock/haddock-api/src/Haddock/Backends/LaTeX.hs
- utils/haddock/haddock-api/src/Haddock/Backends/Xhtml.hs
- utils/haddock/haddock-api/src/Haddock/Backends/Xhtml/Decl.hs
- utils/haddock/haddock-api/src/Haddock/Backends/Xhtml/DocMarkup.hs
- utils/haddock/haddock-api/src/Haddock/Backends/Xhtml/Meta.hs
- utils/haddock/haddock-api/src/Haddock/Backends/Xhtml/Names.hs
- utils/haddock/haddock-api/src/Haddock/Backends/Xhtml/Utils.hs
- utils/haddock/haddock-api/src/Haddock/Convert.hs
- utils/haddock/haddock-api/src/Haddock/Doc.hs
- utils/haddock/haddock-api/src/Haddock/GhcUtils.hs
- utils/haddock/haddock-api/src/Haddock/Interface/AttachInstances.hs
- utils/haddock/haddock-api/src/Haddock/Interface/Create.hs
- utils/haddock/haddock-api/src/Haddock/Interface/Json.hs
- utils/haddock/haddock-api/src/Haddock/Interface/LexParseRn.hs
- utils/haddock/haddock-api/src/Haddock/Interface/ParseModuleHeader.hs
- utils/haddock/haddock-api/src/Haddock/Interface/Rename.hs
- utils/haddock/haddock-api/src/Haddock/Interface/RenameType.hs
- utils/haddock/haddock-api/src/Haddock/InterfaceFile.hs
- utils/haddock/haddock-api/src/Haddock/Options.hs
- utils/haddock/haddock-api/src/Haddock/Parser.hs
- utils/haddock/haddock-api/src/Haddock/Types.hs
- utils/haddock/haddock-api/src/Haddock/Utils/Json.hs
- utils/haddock/haddock-api/src/Haddock/Utils/Json/Parser.hs
- utils/haddock/haddock-api/src/Haddock/Utils/Json/Types.hs
- utils/haddock/haddock-library/src/Documentation/Haddock/Doc.hs
- utils/haddock/haddock-library/src/Documentation/Haddock/Markup.hs
- utils/haddock/haddock-library/src/Documentation/Haddock/Parser.hs
- utils/haddock/haddock-library/src/Documentation/Haddock/Parser/Util.hs
- utils/haddock/haddock-library/src/Documentation/Haddock/Types.hs
- utils/haddock/haddock-library/test/Documentation/Haddock/ParserSpec.hs
- utils/haddock/haddock-test/haddock-test.cabal
- utils/haddock/haddock-test/src/Test/Haddock/Config.hs
The diff was not included because it is too large.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/9d7e1b499640277abc191868e64c9f…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/9d7e1b499640277abc191868e64c9f…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc][wip/fendor/no-code-output-constr] Move warning message into 'backendSupportsInfoTableMap'
by Hannes Siebenhandl (@fendor) 30 Jun '26
by Hannes Siebenhandl (@fendor) 30 Jun '26
30 Jun '26
Hannes Siebenhandl pushed to branch wip/fendor/no-code-output-constr at Glasgow Haskell Compiler / GHC
Commits:
9d7e1b49 by fendor at 2026-06-30T16:40:02+02:00
Move warning message into 'backendSupportsInfoTableMap'
- - - - -
2 changed files:
- compiler/GHC/Driver/Backend.hs
- compiler/GHC/Driver/Session.hs
Changes:
=====================================
compiler/GHC/Driver/Backend.hs
=====================================
@@ -681,15 +681,17 @@ backendSupportsBreakpoints = \case
Named Bytecode -> True
Named NoBackend -> False
--- | If this flag is unset, then the driver ignores the flag @-finfo-table-map@,
--- since the backend doesn't support generating the info table map.
-backendSupportsInfoTableMap :: Backend -> Bool
-backendSupportsInfoTableMap (Named NCG) = True
-backendSupportsInfoTableMap (Named LLVM) = False
-backendSupportsInfoTableMap (Named ViaC) = True
-backendSupportsInfoTableMap (Named JavaScript) = False
-backendSupportsInfoTableMap (Named Bytecode) = False
-backendSupportsInfoTableMap (Named NoBackend) = True -- We are not generating code, so we ignore it any way
+-- | Return is 'IsValid' if the backend supports @-finfo-table-map@.
+-- If 'backendSupportsInfoTableMap' returns 'NotValid', then the driver ignores
+-- the flag @-finfo-table-map@, since the backend doesn't support generating
+-- the info table map.
+backendSupportsInfoTableMap :: Backend -> Validity' String
+backendSupportsInfoTableMap (Named NCG) = IsValid
+backendSupportsInfoTableMap (Named LLVM) = NotValid "-finfo-table-map is incompatible with -fllvm and is disabled (See #26435)"
+backendSupportsInfoTableMap (Named ViaC) = IsValid
+backendSupportsInfoTableMap (Named JavaScript) = NotValid "-finfo-table-map is incompatible with the javascript backend"
+backendSupportsInfoTableMap (Named Bytecode) = NotValid "-finfo-table-map is incompatible with -fbyte-code and is disabled"
+backendSupportsInfoTableMap (Named NoBackend) = IsValid -- We are not generating code, so we ignore it any way
-- | If this flag is set, then the driver forces the
-- optimization level to 0, issuing a warning message if
=====================================
compiler/GHC/Driver/Session.hs
=====================================
@@ -3903,9 +3903,8 @@ makeDynFlagsConsistent dflags
in dflags_c
| gopt Opt_InfoTableMap dflags
- , not (backendSupportsInfoTableMap (backend dflags))
- = loop (gopt_unset dflags Opt_InfoTableMap)
- $ "-finfo-table-map is incompatible with " ++ show (backend dflags) ++ " and is disabled (See #26435)"
+ , NotValid msg <- backendSupportsInfoTableMap (backend dflags)
+ = loop (gopt_unset dflags Opt_InfoTableMap) msg
| otherwise = (dflags, mempty, mempty)
where loc = mkGeneralSrcSpan (fsLit "when making flags consistent")
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/9d7e1b499640277abc191868e64c9f9…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/9d7e1b499640277abc191868e64c9f9…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc][wip/davide/windows-dlls] WIP export-all-symbols from hadrian
by David Eichmann (@DavidEichmann) 30 Jun '26
by David Eichmann (@DavidEichmann) 30 Jun '26
30 Jun '26
David Eichmann pushed to branch wip/davide/windows-dlls at Glasgow Haskell Compiler / GHC
Commits:
17963da9 by David Eichmann at 2026-06-30T15:01:39+01:00
WIP export-all-symbols from hadrian
- - - - -
20 changed files:
- compiler/GHC/CmmToAsm/Config.hs
- compiler/GHC/CmmToAsm/X86/Ppr.hs
- compiler/GHC/Driver/Config/CmmToAsm.hs
- libraries/Win32
- libraries/base/src/Control/Concurrent.hs
- libraries/bytestring
- libraries/file-io
- libraries/ghc-internal/cbits/RtsIface.c
- libraries/ghc-internal/cbits/Win32Utils.c
- libraries/ghc-internal/cbits/inputReady.c
- libraries/ghc-internal/include/HsBase.h
- libraries/ghc-internal/src/GHC/Internal/Bignum/Backend/GMP.hs
- libraries/ghc-internal/src/GHC/Internal/Float.hs
- libraries/ghc-internal/src/GHC/Internal/Float/RealFracMethods.hs
- libraries/ghc-internal/src/GHC/Internal/Foreign/C/Error.hs
- libraries/ghc-internal/src/GHC/Internal/IO/Windows/Handle.hsc
- libraries/ghc-internal/src/GHC/Internal/System/IO.hs
- libraries/ghc-internal/src/GHC/Internal/System/Posix/Internals.hs
- libraries/ghc-internal/src/GHC/Internal/Windows.hs
- libraries/text
Changes:
=====================================
compiler/GHC/CmmToAsm/Config.hs
=====================================
@@ -21,6 +21,7 @@ data NCGConfig = NCGConfig
, ncgThisModule :: !Module -- ^ The name of the module we are currently compiling
, ncgProcAlignment :: !(Maybe Int) -- ^ Mandatory proc alignment
, ncgExternalDynamicRefs :: !Bool -- ^ Generate code to link against dynamic libraries
+ , ncgDynLib :: !Bool -- ^ Generate code for a shared dynamic library
, ncgPIC :: !Bool -- ^ Enable Position-Independent Code
, ncgInlineThresholdMemcpy :: !Word -- ^ If inlining `memcpy` produces less than this threshold (in pseudo-instruction unit), do it
, ncgInlineThresholdMemset :: !Word -- ^ Ditto for `memset`
=====================================
compiler/GHC/CmmToAsm/X86/Ppr.hs
=====================================
@@ -305,6 +305,7 @@ pprExport config lbl isCmmData =
if platformOS platform == OSMinGW32
&& platformTablesNextToCode platform
&& externallyVisibleCLabel lbl
+ && ncgDynLib config
then let
asData = isCmmData || isInfoTableLabel lbl
in
=====================================
compiler/GHC/Driver/Config/CmmToAsm.hs
=====================================
@@ -21,6 +21,7 @@ initNCGConfig dflags this_mod = NCGConfig
, ncgAsmContext = initSDocContext dflags PprCode
, ncgProcAlignment = cmmProcAlignment dflags
, ncgExternalDynamicRefs = gopt Opt_ExternalDynamicRefs dflags
+ , ncgDynLib = ghcLink dflags == LinkDynLib || dynamicNow dflags
, ncgPIC = positionIndependent dflags
, ncgInlineThresholdMemcpy = fromIntegral $ maxInlineMemcpyInsns dflags
, ncgInlineThresholdMemset = fromIntegral $ maxInlineMemsetInsns dflags
=====================================
libraries/Win32
=====================================
@@ -1 +1 @@
-Subproject commit 7d0772bb265a6c59eb14c441cf65c778895528df
+Subproject commit b3d4064052dd6cd42a59d896b193c5c645a43aa9
=====================================
libraries/base/src/Control/Concurrent.hs
=====================================
@@ -132,6 +132,12 @@ import Control.Concurrent.Chan
import Control.Concurrent.QSem
import Control.Concurrent.QSemN
+
+-- Needed for windows dynamic builds
+-- TODO we may need to disable inlining of ccalls by default
+{-# NOINLINE waitFd #-}
+
+
{- $conc_intro
The concurrency extension for Haskell is described in the paper
=====================================
libraries/bytestring
=====================================
@@ -1 +1 @@
-Subproject commit d984ad00644c0157bad04900434b9d36f23633c5
+Subproject commit 739ceeb77746a97fea82d8dce7165de658993b08
=====================================
libraries/file-io
=====================================
@@ -1 +1 @@
-Subproject commit 21303160b5dd91d6197bd1d20a8796ba2a819d4e
+Subproject commit ea36fd962360bef588366b04609c2adc2c82eec7
=====================================
libraries/ghc-internal/cbits/RtsIface.c
=====================================
@@ -8,6 +8,7 @@
#include "Rts.h"
+__attribute__((dllexport))
void init_ghc_hs_iface(void);
// Forward declarations
=====================================
libraries/ghc-internal/cbits/Win32Utils.c
=====================================
@@ -138,6 +138,7 @@ LPWSTR base_getErrorMessage(DWORD err)
return what;
}
+__attribute__((dllexport))
int get_unique_file_info_hwnd(HANDLE h, HsWord64 *dev, HsWord64 *ino)
{
BY_HANDLE_FILE_INFORMATION info;
@@ -167,6 +168,7 @@ BOOL file_exists(LPCTSTR path)
}
/* If true then caller needs to free tempFileName. */
+__attribute__((dllexport))
bool __createUUIDTempFileErrNo (wchar_t* pathName, wchar_t* prefix,
wchar_t* suffix, wchar_t** tempFileName)
{
=====================================
libraries/ghc-internal/cbits/inputReady.c
=====================================
@@ -150,6 +150,7 @@ compute_WaitForSingleObject_timeout(bool infinite, Time remaining)
* 1 => Input ready, 0 => not ready, -1 => error
* On error, sets `errno`.
*/
+__attribute__((dllexport))
int
fdReady(int fd, bool write, int64_t msecs, bool isSock)
{
=====================================
libraries/ghc-internal/include/HsBase.h
=====================================
@@ -133,8 +133,8 @@
#if defined(_WIN32)
/* in Win32Utils.c */
-extern void maperrno (void);
-extern int maperrno_func(DWORD dwErrorCode);
+__attribute__((dllexport)) extern void maperrno (void);
+__attribute__((dllexport)) extern int maperrno_func(DWORD dwErrorCode);
extern HsWord64 getMonotonicUSec(void);
#endif
=====================================
libraries/ghc-internal/src/GHC/Internal/Bignum/Backend/GMP.hs
=====================================
@@ -622,8 +622,11 @@ foreign import ccall unsafe "integer_gmp_mpn_xor_n"
-> IO ()
-- mp_bitcnt_t mpn_popcount (const mp_limb_t *s1p, mp_size_t n)
+{-# NOINLINE c_mpn_popcount #-}
+c_mpn_popcount :: ByteArray# -> GmpSize# -> Word#
+c_mpn_popcount a b = _c_mpn_popcount a b
foreign import ccall unsafe "gmp.h __gmpn_popcount"
- c_mpn_popcount :: ByteArray# -> GmpSize# -> Word#
+ _c_mpn_popcount :: ByteArray# -> GmpSize# -> Word#
-- double integer_gmp_mpn_get_d (const mp_limb_t sp[], const mp_size_t sn)
foreign import ccall unsafe "integer_gmp_mpn_get_d"
=====================================
libraries/ghc-internal/src/GHC/Internal/Float.hs
=====================================
@@ -1632,17 +1632,47 @@ atanhDouble (D# x) = D# (atanhDouble# x)
powerDouble :: Double -> Double -> Double
powerDouble (D# x) (D# y) = D# (x **## y)
-foreign import ccall unsafe "isFloatNaN" isFloatNaN :: Float -> Int
-foreign import ccall unsafe "isFloatInfinite" isFloatInfinite :: Float -> Int
-foreign import ccall unsafe "isFloatDenormalized" isFloatDenormalized :: Float -> Int
-foreign import ccall unsafe "isFloatNegativeZero" isFloatNegativeZero :: Float -> Int
-foreign import ccall unsafe "isFloatFinite" isFloatFinite :: Float -> Int
-
-foreign import ccall unsafe "isDoubleNaN" isDoubleNaN :: Double -> Int
-foreign import ccall unsafe "isDoubleInfinite" isDoubleInfinite :: Double -> Int
-foreign import ccall unsafe "isDoubleDenormalized" isDoubleDenormalized :: Double -> Int
-foreign import ccall unsafe "isDoubleNegativeZero" isDoubleNegativeZero :: Double -> Int
-foreign import ccall unsafe "isDoubleFinite" isDoubleFinite :: Double -> Int
+{-# NOINLINE isFloatInfinite #-}
+isFloatInfinite :: Float -> Int
+isFloatInfinite x = cIsFloatInfinite x
+foreign import ccall unsafe "isFloatInfinite" cIsFloatInfinite :: Float -> Int
+{-# NOINLINE isFloatNaN #-}
+isFloatNaN :: Float -> Int
+isFloatNaN = _isFloatNaN
+foreign import ccall unsafe "isFloatNaN" _isFloatNaN :: Float -> Int
+{-# NOINLINE isFloatDenormalized #-}
+isFloatDenormalized :: Float -> Int
+isFloatDenormalized = _isFloatDenormalized
+foreign import ccall unsafe "isFloatDenormalized" _isFloatDenormalized :: Float -> Int
+{-# NOINLINE isFloatNegativeZero #-}
+isFloatNegativeZero :: Float -> Int
+isFloatNegativeZero = _isFloatNegativeZero
+foreign import ccall unsafe "isFloatNegativeZero" _isFloatNegativeZero :: Float -> Int
+{-# NOINLINE isFloatFinite #-}
+isFloatFinite :: Float -> Int
+isFloatFinite = _isFloatFinite
+foreign import ccall unsafe "isFloatFinite" _isFloatFinite :: Float -> Int
+
+{-# NOINLINE isDoubleInfinite #-}
+isDoubleInfinite :: Double -> Int
+isDoubleInfinite x = cIsDoubleInfinite x
+foreign import ccall unsafe "isDoubleInfinite" cIsDoubleInfinite :: Double -> Int
+{-# NOINLINE isDoubleNaN #-}
+isDoubleNaN :: Double -> Int
+isDoubleNaN = _isDoubleNaN
+foreign import ccall unsafe "isDoubleNaN" _isDoubleNaN :: Double -> Int
+{-# NOINLINE isDoubleDenormalized #-}
+isDoubleDenormalized :: Double -> Int
+isDoubleDenormalized = _isDoubleDenormalized
+foreign import ccall unsafe "isDoubleDenormalized" _isDoubleDenormalized :: Double -> Int
+{-# NOINLINE isDoubleNegativeZero #-}
+isDoubleNegativeZero :: Double -> Int
+isDoubleNegativeZero = _isDoubleNegativeZero
+foreign import ccall unsafe "isDoubleNegativeZero" _isDoubleNegativeZero :: Double -> Int
+{-# NOINLINE isDoubleFinite #-}
+isDoubleFinite :: Double -> Int
+isDoubleFinite = _isDoubleFinite
+foreign import ccall unsafe "isDoubleFinite" _isDoubleFinite :: Double -> Int
------------------------------------------------------------------------
-- Coercion rules
=====================================
libraries/ghc-internal/src/GHC/Internal/Float/RealFracMethods.hs
=====================================
@@ -357,5 +357,8 @@ float2Integer (F# x) =
foreign import ccall unsafe "rintDouble"
c_rintDouble :: Double -> Double
+{-# NOINLINE c_rintFloat #-}
+c_rintFloat :: Float -> Float
+c_rintFloat = _c_rintFloat
foreign import ccall unsafe "rintFloat"
- c_rintFloat :: Float -> Float
+ _c_rintFloat :: Float -> Float
=====================================
libraries/ghc-internal/src/GHC/Internal/Foreign/C/Error.hs
=====================================
@@ -109,6 +109,14 @@ import GHC.Internal.Num
import GHC.Internal.Base ( String, otherwise, return, ($) )
import GHC.Internal.Types ( Bool(..) )
+
+
+-- Needed for windows dynamic builds
+-- TODO we may need to disable inlining of ccalls by default
+{-# NOINLINE getErrno #-}
+
+
+
-- "errno" type
-- ------------
=====================================
libraries/ghc-internal/src/GHC/Internal/IO/Windows/Handle.hsc
=====================================
@@ -384,11 +384,17 @@ foreign import ccall safe "__set_console_echo"
foreign import ccall safe "__get_console_echo"
c_get_console_echo :: HANDLE -> IO BOOL
+{-# NOINLINE c_close_handle #-}
+c_close_handle :: HANDLE -> IO Bool
+c_close_handle = _c_close_handle
foreign import ccall safe "__close_handle"
- c_close_handle :: HANDLE -> IO Bool
+ _c_close_handle :: HANDLE -> IO Bool
+{-# NOINLINE c_handle_type #-}
+c_handle_type :: HANDLE -> IO Int
+c_handle_type = _c_handle_type
foreign import ccall safe "__handle_type"
- c_handle_type :: HANDLE -> IO Int
+ _c_handle_type :: HANDLE -> IO Int
foreign import ccall safe "__set_file_pointer"
c_set_file_pointer :: HANDLE -> CLong -> DWORD -> Ptr CLong -> IO BOOL
@@ -990,8 +996,11 @@ handleToMode hwnd = do
| hasFlag (#{const GENERIC_WRITE}) -> return WriteMode
| otherwise -> error "unknown access mask in handleToMode."
+{-# NOINLINE c_get_handle_access_mask #-}
+c_get_handle_access_mask :: HANDLE -> IO DWORD
+c_get_handle_access_mask = _c_get_handle_access_mask
foreign import ccall unsafe "__get_handle_access_mask"
- c_get_handle_access_mask :: HANDLE -> IO DWORD
+ _c_get_handle_access_mask :: HANDLE -> IO DWORD
release :: RawHandle a => a -> IO ()
release h = if isLockable h
@@ -1011,11 +1020,15 @@ foreign import ccall unsafe "unlockFile"
-- | Returns -1 on error. Otherwise writes two values representing
-- the file into the given ptrs.
+{-# NOINLINE c_getUniqueFileInfo #-}
+c_getUniqueFileInfo :: HANDLE -> Ptr Word64 -> Ptr Word64 -> IO ()
+c_getUniqueFileInfo = _c_getUniqueFileInfo
foreign import ccall unsafe "get_unique_file_info_hwnd"
- c_getUniqueFileInfo :: HANDLE -> Ptr Word64 -> Ptr Word64 -> IO ()
+ _c_getUniqueFileInfo :: HANDLE -> Ptr Word64 -> Ptr Word64 -> IO ()
-- | getUniqueFileInfo assumes the C call to getUniqueFileInfo
-- succeeds.
+{-# NOINLINE getUniqueFileInfo #-}
getUniqueFileInfo :: RawHandle a => a -> IO (Word64, Word64)
getUniqueFileInfo handle = do
with 0 $ \devptr -> do
=====================================
libraries/ghc-internal/src/GHC/Internal/System/IO.hs
=====================================
@@ -738,7 +738,10 @@ openTempFile' loc tmp_dir template binary mode
foreign import ccall "getTempFileNameErrorNo" c_getTempFileNameErrorNo
:: CWString -> CWString -> CWString -> CUInt -> Ptr CWchar -> IO Bool
-foreign import ccall "__createUUIDTempFileErrNo" c_createUUIDTempFileErrNo
+{-# NOINLINE c_createUUIDTempFileErrNo #-}
+c_createUUIDTempFileErrNo :: CWString -> CWString -> CWString -> Ptr CWString -> IO Bool
+c_createUUIDTempFileErrNo = _c_createUUIDTempFileErrNo
+foreign import ccall "__createUUIDTempFileErrNo" _c_createUUIDTempFileErrNo
:: CWString -> CWString -> CWString -> Ptr CWString -> IO Bool
pathSeparator :: String -> Bool
=====================================
libraries/ghc-internal/src/GHC/Internal/System/Posix/Internals.hs
=====================================
@@ -747,8 +747,12 @@ foreign import capi unsafe "HsBase.h _unlink"
foreign import capi unsafe "HsBase.h _utime"
c_utime :: CString -> Ptr CUtimbuf -> IO CInt
+
+{-# NOINLINE c_getpid #-}
+c_getpid :: IO CPid
+c_getpid = _c_getpid
foreign import capi unsafe "HsBase.h _getpid"
- c_getpid :: IO CPid
+ _c_getpid :: IO CPid
#else
-- We use CAPI as on some OSs (eg. Linux) this is wrapped by a macro
-- which redirects to the 64-bit-off_t versions when large file
@@ -833,8 +837,11 @@ foreign import capi unsafe "HsBase.h utime"
c_getpid :: IO CPid
c_getpid = pure 1
#else
+{-# NOINLINE c_getpid #-}
+c_getpid :: IO CPid
+c_getpid = _c_getpid
foreign import ccall unsafe "HsBase.h getpid"
- c_getpid :: IO CPid
+ _c_getpid :: IO CPid
#endif
#endif
@@ -924,7 +931,10 @@ foreign import ccall unsafe "HsBase.h __hscore_o_wronly" o_WRONLY :: CInt
foreign import ccall unsafe "HsBase.h __hscore_o_rdwr" o_RDWR :: CInt
foreign import ccall unsafe "HsBase.h __hscore_o_append" o_APPEND :: CInt
foreign import ccall unsafe "HsBase.h __hscore_o_creat" o_CREAT :: CInt
-foreign import ccall unsafe "HsBase.h __hscore_o_excl" o_EXCL :: CInt
+{-# NOINLINE o_EXCL #-}
+o_EXCL :: CInt
+o_EXCL = _o_EXCL
+foreign import ccall unsafe "HsBase.h __hscore_o_excl" _o_EXCL :: CInt
foreign import ccall unsafe "HsBase.h __hscore_o_trunc" o_TRUNC :: CInt
-- non-POSIX flags.
=====================================
libraries/ghc-internal/src/GHC/Internal/Windows.hs
=====================================
@@ -212,13 +212,19 @@ failUnlessSuccessOr val fn_name act = do
-- by @GetLastError@.
-- | Map the last system error to an errno value, and assign it to @errno@.
+{-# NOINLINE c_maperrno #-}
+c_maperrno :: IO ()
+c_maperrno = _c_maperrno
foreign import ccall unsafe "maperrno" -- in Win32Utils.c
- c_maperrno :: IO ()
+ _c_maperrno :: IO ()
-- | Pure function variant of 'c_maperrno' that does not call @GetLastError@
-- or modify @errno@.
+{-# NOINLINE c_maperrno_func #-}
+c_maperrno_func :: ErrCode -> Errno
+c_maperrno_func = _c_maperrno_func
foreign import ccall unsafe "maperrno_func" -- in Win32Utils.c
- c_maperrno_func :: ErrCode -> Errno
+ _c_maperrno_func :: ErrCode -> Errno
foreign import ccall unsafe "base_getErrorMessage" -- in Win32Utils.c
c_getErrorMessage :: DWORD -> IO LPWSTR
=====================================
libraries/text
=====================================
@@ -1 +1 @@
-Subproject commit 423fd981e576bd17a8b5fa48d0ad6b9a0c370e77
+Subproject commit a1e9d389911eb613f2951364b9203be92ebc3cfa
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/17963da99ffec259b8d05e78a8f93a4…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/17963da99ffec259b8d05e78a8f93a4…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc][wip/mangoiv/aarch64-longjump] driver: enable -finter-module-far-jumps by default
by Magnus (@MangoIV) 30 Jun '26
by Magnus (@MangoIV) 30 Jun '26
30 Jun '26
Magnus pushed to branch wip/mangoiv/aarch64-longjump at Glasgow Haskell Compiler / GHC
Commits:
ffa245f1 by mangoiv at 2026-06-30T15:29:11+02:00
driver: enable -finter-module-far-jumps by default
this fixes a compatibility bug with certain binutils/gcc versions where
we were seeing jump offset overflow errors.
This commit can probably reverted if we stop supporting the problematic
binutils/gcc verions (2.44 and 14.2, respectively)
Reolves #26994
- - - - -
4 changed files:
- + changelog.d/inter-module-far-jumps-aarch64-default
- compiler/GHC/Driver/DynFlags.hs
- compiler/GHC/Platform/Ways.hs
- docs/users_guide/using-optimisation.rst
Changes:
=====================================
changelog.d/inter-module-far-jumps-aarch64-default
=====================================
@@ -0,0 +1,5 @@
+section: compiler
+synopsis: enable -finter-module-far-jumps by default on profiled aarch64-linux
+issues: #26994
+mrs: !16016
+description: Some binutils and gcc versions lead to jump offset erros on aarch64-linux profiled ways. To mitigate this bug, we enable inter-module-far-jumps by default on this platform/way.
=====================================
compiler/GHC/Driver/DynFlags.hs
=====================================
@@ -1241,7 +1241,6 @@ defaultFlags settings
Opt_SpecialiseIncoherents,
Opt_WriteSelfRecompInfo
]
-
++ [f | (ns,f) <- optLevelFlags, 0 `elem` ns]
-- The default -O0 options
=====================================
compiler/GHC/Platform/Ways.hs
=====================================
@@ -154,6 +154,14 @@ wayGeneralFlags _ WayDyn = [Opt_PIC, Opt_ExternalDynamicRefs]
-- .so before loading the .so using the system linker. Since only
-- PIC objects can be linked into a .so, we have to compile even
-- modules of the main program with -fPIC when using -dynamic.
+wayGeneralFlags platform WayProf
+ | ArchAArch64 <- platformArch platform
+ , OSLinux <- platformOS platform = [Opt_InterModuleFarJumps]
+ {- note(mangoiv):
+ - on aarch64 profiled-dynamic, we are seeing jump offset overflow
+ - errors on certain binutils versions. This can probably be deactivated
+ - if we stop supporting binutils 2.44 / GCC 14.2
+ - https://gitlab.haskell.org/ghc/ghc/-/issues/26994 -}
wayGeneralFlags _ WayProf = []
-- | Turn these flags off when enabling this way
=====================================
docs/users_guide/using-optimisation.rst
=====================================
@@ -732,7 +732,7 @@ as such you shouldn't need to set any of them explicitly. A flag
:reverse: -fno-inter-module-far-jumps
:category:
- :default: Off
+ :default: on if the target is AArch64-Linux and this is a profiling way, off on all others
This flag forces GHC to use far jumps instead of near jumps for all jumps
which cross module boundries. This removes the need for jump islands/linker
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/ffa245f11984d6088590c76b75227d3…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/ffa245f11984d6088590c76b75227d3…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc][wip/romes/ast-ohne-faststring] 2 commits: ttg: Using Text over FastString in the AST
by Rodrigo Mesquita (@alt-romes) 30 Jun '26
by Rodrigo Mesquita (@alt-romes) 30 Jun '26
30 Jun '26
Rodrigo Mesquita pushed to branch wip/romes/ast-ohne-faststring at Glasgow Haskell Compiler / GHC
Commits:
4824c835 by Rodrigo Mesquita at 2026-06-30T14:13:34+01:00
ttg: Using Text over FastString in the AST
To make the AST independent of GHC, this commit replaces usages of
`FastString` with `Text` in the AST, killing the last edge from
Language.Haskell.* to GHC.* modules.
Even though we /do/ want to use FastStrings in general -- critically in
Names or Ids -- there is no particular reason for the FastStrings that
occur in the AST proper to be FastStrings. Strings in the AST are
typically unique and don't benefit particularly from being interned
FastStrings with Uniques for fast comparison.
Final progress towards #21592
- - - - -
4b8a1ea5 by Matthew Pickering at 2026-06-30T14:13:35+01:00
Correctness fix for mkFastStringText
- - - - -
92 changed files:
- + TODO
- compiler/GHC/Builtin/Types.hs
- compiler/GHC/Builtin/Utils.hs
- compiler/GHC/Cmm/CLabel.hs
- compiler/GHC/Core/Ppr.hs
- compiler/GHC/Core/TyCon.hs
- compiler/GHC/Data/FastString.hs
- compiler/GHC/Data/StringBuffer.hs
- compiler/GHC/Driver/Errors/Ppr.hs
- compiler/GHC/Driver/Session.hs
- compiler/GHC/Hs/Decls.hs
- compiler/GHC/Hs/Expr.hs
- compiler/GHC/Hs/Lit.hs
- compiler/GHC/Hs/Type.hs
- compiler/GHC/Hs/Utils.hs
- compiler/GHC/HsToCore.hs
- compiler/GHC/HsToCore/Errors/Types.hs
- compiler/GHC/HsToCore/Expr.hs
- compiler/GHC/HsToCore/Foreign/C.hs
- compiler/GHC/HsToCore/Foreign/JavaScript.hs
- compiler/GHC/HsToCore/Foreign/Wasm.hs
- compiler/GHC/HsToCore/Match.hs
- compiler/GHC/HsToCore/Match/Literal.hs
- compiler/GHC/HsToCore/Pmc/Desugar.hs
- compiler/GHC/HsToCore/Pmc/Solver/Types.hs
- compiler/GHC/HsToCore/Quote.hs
- compiler/GHC/Iface/Syntax.hs
- compiler/GHC/Parser.y
- compiler/GHC/Parser/Errors/Ppr.hs
- compiler/GHC/Parser/Errors/Types.hs
- compiler/GHC/Parser/HaddockLex.x
- compiler/GHC/Parser/Lexer.x
- compiler/GHC/Parser/PostProcess.hs
- compiler/GHC/Rename/Bind.hs
- compiler/GHC/Rename/Env.hs
- compiler/GHC/Rename/HsType.hs
- compiler/GHC/Rename/Module.hs
- compiler/GHC/Rename/Names.hs
- compiler/GHC/Rename/Splice.hs
- compiler/GHC/Rename/Utils.hs
- compiler/GHC/StgToByteCode.hs
- compiler/GHC/StgToCmm/Foreign.hs
- compiler/GHC/StgToCmm/Prim.hs
- compiler/GHC/StgToJS/FFI.hs
- compiler/GHC/Tc/Deriv/Generate.hs
- compiler/GHC/Tc/Deriv/Generics.hs
- compiler/GHC/Tc/Errors.hs
- compiler/GHC/Tc/Errors/Ppr.hs
- compiler/GHC/Tc/Gen/Bind.hs
- compiler/GHC/Tc/Gen/Expr.hs
- compiler/GHC/Tc/Gen/HsType.hs
- compiler/GHC/Tc/Gen/Pat.hs
- compiler/GHC/Tc/Gen/Sig.hs
- compiler/GHC/Tc/Gen/Splice.hs
- compiler/GHC/Tc/Instance/Class.hs
- compiler/GHC/Tc/Solver/Dict.hs
- compiler/GHC/Tc/TyCl.hs
- compiler/GHC/Tc/TyCl/Utils.hs
- compiler/GHC/Tc/Types/Origin.hs
- compiler/GHC/Tc/Validity.hs
- compiler/GHC/ThToHs.hs
- compiler/GHC/Types/Basic.hs
- compiler/GHC/Types/Error.hs
- compiler/GHC/Types/FieldLabel.hs
- compiler/GHC/Types/ForeignCall.hs
- compiler/GHC/Types/Literal.hs
- compiler/GHC/Types/PkgQual.hs
- compiler/GHC/Types/SourceText.hs
- compiler/GHC/Unit/Module/Warnings.hs
- compiler/GHC/Utils/Outputable.hs
- compiler/Language/Haskell/Syntax/Basic.hs
- compiler/Language/Haskell/Syntax/Decls.hs
- compiler/Language/Haskell/Syntax/Decls/Foreign.hs
- compiler/Language/Haskell/Syntax/Expr.hs
- compiler/Language/Haskell/Syntax/Lit.hs
- compiler/Language/Haskell/Syntax/Module/Name.hs
- compiler/Language/Haskell/Syntax/Type.hs
- compiler/ghc.cabal.in
- + testsuite/tests/parser/should_run/StringStartsWithNull.hs
- + testsuite/tests/parser/should_run/StringStartsWithNull.stdout
- testsuite/tests/parser/should_run/all.T
- utils/check-exact/ExactPrint.hs
- utils/check-exact/check-exact.cabal
- utils/haddock/haddock-api/haddock-api.cabal
- utils/haddock/haddock-api/src/Haddock.hs
- utils/haddock/haddock-api/src/Haddock/Backends/Hyperlinker/Parser.hs
- utils/haddock/haddock-api/src/Haddock/Backends/Xhtml/Names.hs
- utils/haddock/haddock-api/src/Haddock/Convert.hs
- utils/haddock/haddock-api/src/Haddock/GhcUtils.hs
- utils/haddock/haddock-api/src/Haddock/Interface/AttachInstances.hs
- utils/haddock/haddock-api/src/Haddock/Interface/Create.hs
- utils/haddock/haddock-api/src/Haddock/Interface/LexParseRn.hs
The diff was not included because it is too large.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/094324d6c8d9e8b5a015ec8d35e174…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/094324d6c8d9e8b5a015ec8d35e174…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc][wip/marge_bot_batch_merge_job] 4 commits: EPA: Remove LocatedC / SrcSpanAnnC
by Marge Bot (@marge-bot) 30 Jun '26
by Marge Bot (@marge-bot) 30 Jun '26
30 Jun '26
Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC
Commits:
2d0fd154 by Alan Zimmerman at 2026-06-29T11:44:00-04:00
EPA: Remove LocatedC / SrcSpanAnnC
This is part of a cleanup of the zoo of
SrcSpanAnnXXX types for exact print annotations.
This one removes SrcSpanAnnC used for storing exact print annotations
for contexts. It replaces it with an explicit `HsContext` data type
that carries the annotations and the context.
So, replace
type HsContext pass = [LHsType pass]
with
type HsContext pass = HsContextDetails pass (LHsType pass)
data HsContextDetails pass arg
= HsContext
{ hsc_ext :: !(XHsContext pass)
, hsc_ctxt :: [arg]
}
| XHsContextDetails !(XXHsContextDetails pass)
We need the parameterised HsContextDetails because it is used both for
HsQual carrying 'LHsExpr p' and "normal" contexts carrying 'LHsType p'.
- - - - -
c0a81af9 by Luite Stegeman at 2026-06-30T09:02:58-04:00
rts: handle large AP closures in compacting GC
The function update_fwd_large in the compacting GC could run into
an unexpected object with the following error:
internal error: update_fwd_large: unknown/strange object 24
Closure type 24 is the AP closure, which was not handled in
upd_fwd_large. This patch adds handling them.
fixes #27434
- - - - -
a18c6a20 by Luite Stegeman at 2026-06-30T09:02:58-04:00
testsuite: use compacting_gc way instead of hardcoding +RTS -c
- - - - -
51ace0b4 by Alan Zimmerman at 2026-06-30T09:02:59-04:00
EPA: Remove LocatedLW from LStmtLR
HsDo already had its XDo extension point for an
AnnList, which also appeared in LocatedLW.
So we remove the redundant one and use the one inside HsDo
as originally intended.
Also delete LocatedLC/LocatedLS as they were unused
- - - - -
46 changed files:
- + changelog.d/fix-compacting-gc-ap-27434
- compiler/GHC/Hs/Decls.hs
- compiler/GHC/Hs/Dump.hs
- compiler/GHC/Hs/Expr.hs
- compiler/GHC/Hs/Instances.hs
- compiler/GHC/Hs/Type.hs
- compiler/GHC/Hs/Utils.hs
- compiler/GHC/HsToCore/Quote.hs
- compiler/GHC/Iface/Ext/Ast.hs
- compiler/GHC/Parser.y
- compiler/GHC/Parser/Annotation.hs
- compiler/GHC/Parser/PostProcess.hs
- compiler/GHC/Parser/PostProcess/Haddock.hs
- compiler/GHC/Parser/Types.hs
- compiler/GHC/Rename/Expr.hs
- compiler/GHC/Rename/HsType.hs
- compiler/GHC/Rename/Module.hs
- compiler/GHC/Rename/Pat.hs
- compiler/GHC/Tc/Deriv.hs
- compiler/GHC/Tc/Gen/App.hs
- compiler/GHC/Tc/Gen/HsType.hs
- compiler/GHC/Tc/Gen/Match.hs
- compiler/GHC/Tc/Gen/Sig.hs
- compiler/GHC/Tc/TyCl.hs
- compiler/GHC/ThToHs.hs
- compiler/Language/Haskell/Syntax/Expr.hs
- compiler/Language/Haskell/Syntax/Type.hs
- rts/sm/Compact.c
- testsuite/tests/ghc-api/T25121_status.stdout
- testsuite/tests/parser/should_compile/DumpParsedAstComments.stderr
- testsuite/tests/parser/should_compile/DumpSemis.stderr
- testsuite/tests/parser/should_compile/T15323.stderr
- testsuite/tests/printer/Test20297.stdout
- testsuite/tests/printer/Test24533.stdout
- + testsuite/tests/rts/T27434.hs
- + testsuite/tests/rts/T27434.stdout
- testsuite/tests/rts/all.T
- utils/check-exact/ExactPrint.hs
- utils/haddock/haddock-api/src/Haddock/Backends/LaTeX.hs
- utils/haddock/haddock-api/src/Haddock/Backends/Xhtml/Decl.hs
- utils/haddock/haddock-api/src/Haddock/Convert.hs
- utils/haddock/haddock-api/src/Haddock/GhcUtils.hs
- utils/haddock/haddock-api/src/Haddock/Interface/Create.hs
- utils/haddock/haddock-api/src/Haddock/Interface/Rename.hs
- utils/haddock/haddock-api/src/Haddock/Interface/RenameType.hs
- utils/haddock/haddock-api/src/Haddock/Types.hs
The diff was not included because it is too large.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/8e4d4a78f6b73adfe9cbb0a71213e0…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/8e4d4a78f6b73adfe9cbb0a71213e0…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
30 Jun '26
Zubin pushed to branch wip/25924 at Glasgow Haskell Compiler / GHC
Commits:
7959f563 by Zubin Duggal at 2026-06-30T18:26:12+05:30
Use isTerminatingType instead of isPredTy
- - - - -
2 changed files:
- compiler/GHC/Core/Make.hs
- compiler/GHC/Core/Opt/WorkWrap/Utils.hs
Changes:
=====================================
compiler/GHC/Core/Make.hs
=====================================
@@ -66,7 +66,7 @@ import GHC.Types.Unique.Supply
import GHC.Core
import GHC.Core.Utils ( exprType, mkSingleAltCase, bindNonRec, mkCast, mkTick )
import GHC.Core.Type
-import GHC.Core.Predicate ( scopedSort, isPredTy )
+import GHC.Core.Predicate ( scopedSort, isEqPred )
import GHC.Core.TyCo.Compare ( eqType )
import GHC.Core.Coercion ( isCoVar, mkRepReflCo, mkForAllVisCos )
import GHC.Core.DataCon ( DataCon, dataConWorkId, dataConWrapId )
@@ -234,8 +234,11 @@ mkLitRubbish :: Type -> Maybe CoreExpr
mkLitRubbish ty
| not (noFreeVarsOfType rep)
= Nothing -- Satisfy INVARIANT 1
- | isPredTy ty
+ | isEqPred ty
= Nothing -- Satisfy INVARIANT 2
+ | isTerminatingType ty
+ = Nothing -- Don't make a rubbish dictionary record (#25924).
+ -- See Note [Don't make fillers for predicates] in GHC.Core.Opt.WorkWrap.Utils
| otherwise
= Just (Lit (LitRubbish torc rep) `mkTyApps` [ty])
where
=====================================
compiler/GHC/Core/Opt/WorkWrap/Utils.hs
=====================================
@@ -30,7 +30,6 @@ import GHC.Core.Subst
import GHC.Core.Type
import GHC.Core.Multiplicity
import GHC.Core.Coercion
-import GHC.Core.Predicate( isPredTy )
import GHC.Core.Reduction
import GHC.Core.FamInstEnv
import GHC.Core.Predicate( isEqualityClass )
@@ -1074,7 +1073,7 @@ mkAbsentFiller opts arg str
-- if we are wrong (like we were in #11126). Otherwise we fall through to the
-- less-desirable mkLitRubbish case.
| mightBeLiftedType arg_ty
- , not (isPredTy arg_ty) -- See (AF4) in Note [Absent fillers]
+ , not (isTerminatingType arg_ty) -- See (AF4) in Note [Absent fillers]
, not (isStrictDmd (idDemandInfo arg)) -- See (AF2)
, not (isMarkedStrict str) -- in Note [Absent fillers]
= Just (mkAbsentErrorApp arg_ty msg)
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/7959f563ffc6a0e12dfbe4d59b37b37…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/7959f563ffc6a0e12dfbe4d59b37b37…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc][wip/mangoiv/aarch64-longjump] driver: enable -finter-module-far-jumps by default
by Magnus (@MangoIV) 30 Jun '26
by Magnus (@MangoIV) 30 Jun '26
30 Jun '26
Magnus pushed to branch wip/mangoiv/aarch64-longjump at Glasgow Haskell Compiler / GHC
Commits:
8a0cf1dd by mangoiv at 2026-06-30T14:46:52+02:00
driver: enable -finter-module-far-jumps by default
this fixes a compatibility bug with certain binutils/gcc versions where
we were seeing jump offset overflow errors.
This commit can probably reverted if we stop supporting the problematic
binutils/gcc verions (2.44 and 14.2, respectively)
Reolves #26994
- - - - -
4 changed files:
- + changelog.d/inter-module-far-jumps-aarch64-default
- compiler/GHC/Driver/DynFlags.hs
- compiler/GHC/Platform/Ways.hs
- docs/users_guide/using-optimisation.rst
Changes:
=====================================
changelog.d/inter-module-far-jumps-aarch64-default
=====================================
@@ -0,0 +1,5 @@
+section: driver
+synopsis: enable -finter-module-far-jumps by default on profiled aarch64-linux
+issues: #26994
+mrs: !16016
+description: Some binutils and gcc versions lead to jump offset erros on aarch64-linux profiled ways. To mitigate this bug, we enable inter-module-far-jumps by default on this platform/way.
=====================================
compiler/GHC/Driver/DynFlags.hs
=====================================
@@ -1241,7 +1241,6 @@ defaultFlags settings
Opt_SpecialiseIncoherents,
Opt_WriteSelfRecompInfo
]
-
++ [f | (ns,f) <- optLevelFlags, 0 `elem` ns]
-- The default -O0 options
=====================================
compiler/GHC/Platform/Ways.hs
=====================================
@@ -154,6 +154,14 @@ wayGeneralFlags _ WayDyn = [Opt_PIC, Opt_ExternalDynamicRefs]
-- .so before loading the .so using the system linker. Since only
-- PIC objects can be linked into a .so, we have to compile even
-- modules of the main program with -fPIC when using -dynamic.
+wayGeneralFlags platform WayProf
+ | ArchAArch64 <- platformArch platform
+ , OSLinux <- platformOS platform = [Opt_InterModuleFarJumps]
+ {- note(mangoiv):
+ - on aarch64 profiled-dynamic, we are seeing jump offset overflow
+ - errors on certain binutils versions. This can probably be deactivated
+ - if we stop supporting binutils 2.44 / GCC 14.2
+ - https://gitlab.haskell.org/ghc/ghc/-/issues/26994 -}
wayGeneralFlags _ WayProf = []
-- | Turn these flags off when enabling this way
=====================================
docs/users_guide/using-optimisation.rst
=====================================
@@ -732,7 +732,7 @@ as such you shouldn't need to set any of them explicitly. A flag
:reverse: -fno-inter-module-far-jumps
:category:
- :default: Off
+ :default: on if the target is AArch64-Linux and this is a profiling way, off on all others
This flag forces GHC to use far jumps instead of near jumps for all jumps
which cross module boundries. This removes the need for jump islands/linker
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/8a0cf1dd5b40228b54cda3cb60c57c9…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/8a0cf1dd5b40228b54cda3cb60c57c9…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc] Pushed new branch wip/torsten.schmits/mwb-26-01/abstract-linkables
by Torsten Schmits (@torsten.schmits) 30 Jun '26
by Torsten Schmits (@torsten.schmits) 30 Jun '26
30 Jun '26
Torsten Schmits pushed new branch wip/torsten.schmits/mwb-26-01/abstract-linkables at Glasgow Haskell Compiler / GHC
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/torsten.schmits/mwb-26-01/abs…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc][wip/davide/windows-dlls] WIP export-all-symbols from hadrian
by David Eichmann (@DavidEichmann) 30 Jun '26
by David Eichmann (@DavidEichmann) 30 Jun '26
30 Jun '26
David Eichmann pushed to branch wip/davide/windows-dlls at Glasgow Haskell Compiler / GHC
Commits:
7a30f391 by David Eichmann at 2026-06-30T13:38:43+01:00
WIP export-all-symbols from hadrian
- - - - -
19 changed files:
- compiler/GHC/CmmToAsm/Config.hs
- compiler/GHC/CmmToAsm/X86/Ppr.hs
- compiler/GHC/Driver/Config/CmmToAsm.hs
- libraries/Win32
- libraries/base/src/Control/Concurrent.hs
- libraries/bytestring
- libraries/file-io
- libraries/ghc-internal/cbits/Win32Utils.c
- libraries/ghc-internal/cbits/inputReady.c
- libraries/ghc-internal/include/HsBase.h
- libraries/ghc-internal/src/GHC/Internal/Bignum/Backend/GMP.hs
- libraries/ghc-internal/src/GHC/Internal/Float.hs
- libraries/ghc-internal/src/GHC/Internal/Float/RealFracMethods.hs
- libraries/ghc-internal/src/GHC/Internal/Foreign/C/Error.hs
- libraries/ghc-internal/src/GHC/Internal/IO/Windows/Handle.hsc
- libraries/ghc-internal/src/GHC/Internal/System/IO.hs
- libraries/ghc-internal/src/GHC/Internal/System/Posix/Internals.hs
- libraries/ghc-internal/src/GHC/Internal/Windows.hs
- libraries/text
Changes:
=====================================
compiler/GHC/CmmToAsm/Config.hs
=====================================
@@ -21,6 +21,7 @@ data NCGConfig = NCGConfig
, ncgThisModule :: !Module -- ^ The name of the module we are currently compiling
, ncgProcAlignment :: !(Maybe Int) -- ^ Mandatory proc alignment
, ncgExternalDynamicRefs :: !Bool -- ^ Generate code to link against dynamic libraries
+ , ncgDynLib :: !Bool -- ^ Generate code for a shared dynamic library
, ncgPIC :: !Bool -- ^ Enable Position-Independent Code
, ncgInlineThresholdMemcpy :: !Word -- ^ If inlining `memcpy` produces less than this threshold (in pseudo-instruction unit), do it
, ncgInlineThresholdMemset :: !Word -- ^ Ditto for `memset`
=====================================
compiler/GHC/CmmToAsm/X86/Ppr.hs
=====================================
@@ -305,6 +305,7 @@ pprExport config lbl isCmmData =
if platformOS platform == OSMinGW32
&& platformTablesNextToCode platform
&& externallyVisibleCLabel lbl
+ && ncgDynLib config
then let
asData = isCmmData || isInfoTableLabel lbl
in
=====================================
compiler/GHC/Driver/Config/CmmToAsm.hs
=====================================
@@ -21,6 +21,7 @@ initNCGConfig dflags this_mod = NCGConfig
, ncgAsmContext = initSDocContext dflags PprCode
, ncgProcAlignment = cmmProcAlignment dflags
, ncgExternalDynamicRefs = gopt Opt_ExternalDynamicRefs dflags
+ , ncgDynLib = ghcLink dflags == LinkDynLib || dynamicNow dflags
, ncgPIC = positionIndependent dflags
, ncgInlineThresholdMemcpy = fromIntegral $ maxInlineMemcpyInsns dflags
, ncgInlineThresholdMemset = fromIntegral $ maxInlineMemsetInsns dflags
=====================================
libraries/Win32
=====================================
@@ -1 +1 @@
-Subproject commit 7d0772bb265a6c59eb14c441cf65c778895528df
+Subproject commit b3d4064052dd6cd42a59d896b193c5c645a43aa9
=====================================
libraries/base/src/Control/Concurrent.hs
=====================================
@@ -132,6 +132,12 @@ import Control.Concurrent.Chan
import Control.Concurrent.QSem
import Control.Concurrent.QSemN
+
+-- Needed for windows dynamic builds
+-- TODO we may need to disable inlining of ccalls by default
+{-# NOINLINE waitFd #-}
+
+
{- $conc_intro
The concurrency extension for Haskell is described in the paper
=====================================
libraries/bytestring
=====================================
@@ -1 +1 @@
-Subproject commit d984ad00644c0157bad04900434b9d36f23633c5
+Subproject commit 739ceeb77746a97fea82d8dce7165de658993b08
=====================================
libraries/file-io
=====================================
@@ -1 +1 @@
-Subproject commit 21303160b5dd91d6197bd1d20a8796ba2a819d4e
+Subproject commit ea36fd962360bef588366b04609c2adc2c82eec7
=====================================
libraries/ghc-internal/cbits/Win32Utils.c
=====================================
@@ -138,6 +138,7 @@ LPWSTR base_getErrorMessage(DWORD err)
return what;
}
+__attribute__((dllexport))
int get_unique_file_info_hwnd(HANDLE h, HsWord64 *dev, HsWord64 *ino)
{
BY_HANDLE_FILE_INFORMATION info;
@@ -167,6 +168,7 @@ BOOL file_exists(LPCTSTR path)
}
/* If true then caller needs to free tempFileName. */
+__attribute__((dllexport))
bool __createUUIDTempFileErrNo (wchar_t* pathName, wchar_t* prefix,
wchar_t* suffix, wchar_t** tempFileName)
{
=====================================
libraries/ghc-internal/cbits/inputReady.c
=====================================
@@ -150,6 +150,7 @@ compute_WaitForSingleObject_timeout(bool infinite, Time remaining)
* 1 => Input ready, 0 => not ready, -1 => error
* On error, sets `errno`.
*/
+__attribute__((dllexport))
int
fdReady(int fd, bool write, int64_t msecs, bool isSock)
{
=====================================
libraries/ghc-internal/include/HsBase.h
=====================================
@@ -133,8 +133,8 @@
#if defined(_WIN32)
/* in Win32Utils.c */
-extern void maperrno (void);
-extern int maperrno_func(DWORD dwErrorCode);
+__attribute__((dllexport)) extern void maperrno (void);
+__attribute__((dllexport)) extern int maperrno_func(DWORD dwErrorCode);
extern HsWord64 getMonotonicUSec(void);
#endif
=====================================
libraries/ghc-internal/src/GHC/Internal/Bignum/Backend/GMP.hs
=====================================
@@ -622,8 +622,11 @@ foreign import ccall unsafe "integer_gmp_mpn_xor_n"
-> IO ()
-- mp_bitcnt_t mpn_popcount (const mp_limb_t *s1p, mp_size_t n)
+{-# NOINLINE c_mpn_popcount #-}
+c_mpn_popcount :: ByteArray# -> GmpSize# -> Word#
+c_mpn_popcount a b = _c_mpn_popcount a b
foreign import ccall unsafe "gmp.h __gmpn_popcount"
- c_mpn_popcount :: ByteArray# -> GmpSize# -> Word#
+ _c_mpn_popcount :: ByteArray# -> GmpSize# -> Word#
-- double integer_gmp_mpn_get_d (const mp_limb_t sp[], const mp_size_t sn)
foreign import ccall unsafe "integer_gmp_mpn_get_d"
=====================================
libraries/ghc-internal/src/GHC/Internal/Float.hs
=====================================
@@ -1632,17 +1632,47 @@ atanhDouble (D# x) = D# (atanhDouble# x)
powerDouble :: Double -> Double -> Double
powerDouble (D# x) (D# y) = D# (x **## y)
-foreign import ccall unsafe "isFloatNaN" isFloatNaN :: Float -> Int
-foreign import ccall unsafe "isFloatInfinite" isFloatInfinite :: Float -> Int
-foreign import ccall unsafe "isFloatDenormalized" isFloatDenormalized :: Float -> Int
-foreign import ccall unsafe "isFloatNegativeZero" isFloatNegativeZero :: Float -> Int
-foreign import ccall unsafe "isFloatFinite" isFloatFinite :: Float -> Int
-
-foreign import ccall unsafe "isDoubleNaN" isDoubleNaN :: Double -> Int
-foreign import ccall unsafe "isDoubleInfinite" isDoubleInfinite :: Double -> Int
-foreign import ccall unsafe "isDoubleDenormalized" isDoubleDenormalized :: Double -> Int
-foreign import ccall unsafe "isDoubleNegativeZero" isDoubleNegativeZero :: Double -> Int
-foreign import ccall unsafe "isDoubleFinite" isDoubleFinite :: Double -> Int
+{-# NOINLINE isFloatInfinite #-}
+isFloatInfinite :: Float -> Int
+isFloatInfinite x = cIsFloatInfinite x
+foreign import ccall unsafe "isFloatInfinite" cIsFloatInfinite :: Float -> Int
+{-# NOINLINE isFloatNaN #-}
+isFloatNaN :: Float -> Int
+isFloatNaN = _isFloatNaN
+foreign import ccall unsafe "isFloatNaN" _isFloatNaN :: Float -> Int
+{-# NOINLINE isFloatDenormalized #-}
+isFloatDenormalized :: Float -> Int
+isFloatDenormalized = _isFloatDenormalized
+foreign import ccall unsafe "isFloatDenormalized" _isFloatDenormalized :: Float -> Int
+{-# NOINLINE isFloatNegativeZero #-}
+isFloatNegativeZero :: Float -> Int
+isFloatNegativeZero = _isFloatNegativeZero
+foreign import ccall unsafe "isFloatNegativeZero" _isFloatNegativeZero :: Float -> Int
+{-# NOINLINE isFloatFinite #-}
+isFloatFinite :: Float -> Int
+isFloatFinite = _isFloatFinite
+foreign import ccall unsafe "isFloatFinite" _isFloatFinite :: Float -> Int
+
+{-# NOINLINE isDoubleInfinite #-}
+isDoubleInfinite :: Double -> Int
+isDoubleInfinite x = cIsDoubleInfinite x
+foreign import ccall unsafe "isDoubleInfinite" cIsDoubleInfinite :: Double -> Int
+{-# NOINLINE isDoubleNaN #-}
+isDoubleNaN :: Double -> Int
+isDoubleNaN = _isDoubleNaN
+foreign import ccall unsafe "isDoubleNaN" _isDoubleNaN :: Double -> Int
+{-# NOINLINE isDoubleDenormalized #-}
+isDoubleDenormalized :: Double -> Int
+isDoubleDenormalized = _isDoubleDenormalized
+foreign import ccall unsafe "isDoubleDenormalized" _isDoubleDenormalized :: Double -> Int
+{-# NOINLINE isDoubleNegativeZero #-}
+isDoubleNegativeZero :: Double -> Int
+isDoubleNegativeZero = _isDoubleNegativeZero
+foreign import ccall unsafe "isDoubleNegativeZero" _isDoubleNegativeZero :: Double -> Int
+{-# NOINLINE isDoubleFinite #-}
+isDoubleFinite :: Double -> Int
+isDoubleFinite = _isDoubleFinite
+foreign import ccall unsafe "isDoubleFinite" _isDoubleFinite :: Double -> Int
------------------------------------------------------------------------
-- Coercion rules
=====================================
libraries/ghc-internal/src/GHC/Internal/Float/RealFracMethods.hs
=====================================
@@ -357,5 +357,8 @@ float2Integer (F# x) =
foreign import ccall unsafe "rintDouble"
c_rintDouble :: Double -> Double
+{-# NOINLINE c_rintFloat #-}
+c_rintFloat :: Float -> Float
+c_rintFloat = _c_rintFloat
foreign import ccall unsafe "rintFloat"
- c_rintFloat :: Float -> Float
+ _c_rintFloat :: Float -> Float
=====================================
libraries/ghc-internal/src/GHC/Internal/Foreign/C/Error.hs
=====================================
@@ -109,6 +109,14 @@ import GHC.Internal.Num
import GHC.Internal.Base ( String, otherwise, return, ($) )
import GHC.Internal.Types ( Bool(..) )
+
+
+-- Needed for windows dynamic builds
+-- TODO we may need to disable inlining of ccalls by default
+{-# NOINLINE getErrno #-}
+
+
+
-- "errno" type
-- ------------
=====================================
libraries/ghc-internal/src/GHC/Internal/IO/Windows/Handle.hsc
=====================================
@@ -384,11 +384,17 @@ foreign import ccall safe "__set_console_echo"
foreign import ccall safe "__get_console_echo"
c_get_console_echo :: HANDLE -> IO BOOL
+{-# NOINLINE c_close_handle #-}
+c_close_handle :: HANDLE -> IO Bool
+c_close_handle = _c_close_handle
foreign import ccall safe "__close_handle"
- c_close_handle :: HANDLE -> IO Bool
+ _c_close_handle :: HANDLE -> IO Bool
+{-# NOINLINE c_handle_type #-}
+c_handle_type :: HANDLE -> IO Int
+c_handle_type = _c_handle_type
foreign import ccall safe "__handle_type"
- c_handle_type :: HANDLE -> IO Int
+ _c_handle_type :: HANDLE -> IO Int
foreign import ccall safe "__set_file_pointer"
c_set_file_pointer :: HANDLE -> CLong -> DWORD -> Ptr CLong -> IO BOOL
@@ -990,8 +996,11 @@ handleToMode hwnd = do
| hasFlag (#{const GENERIC_WRITE}) -> return WriteMode
| otherwise -> error "unknown access mask in handleToMode."
+{-# NOINLINE c_get_handle_access_mask #-}
+c_get_handle_access_mask :: HANDLE -> IO DWORD
+c_get_handle_access_mask = _c_get_handle_access_mask
foreign import ccall unsafe "__get_handle_access_mask"
- c_get_handle_access_mask :: HANDLE -> IO DWORD
+ _c_get_handle_access_mask :: HANDLE -> IO DWORD
release :: RawHandle a => a -> IO ()
release h = if isLockable h
@@ -1011,11 +1020,15 @@ foreign import ccall unsafe "unlockFile"
-- | Returns -1 on error. Otherwise writes two values representing
-- the file into the given ptrs.
+{-# NOINLINE c_getUniqueFileInfo #-}
+c_getUniqueFileInfo :: HANDLE -> Ptr Word64 -> Ptr Word64 -> IO ()
+c_getUniqueFileInfo = _c_getUniqueFileInfo
foreign import ccall unsafe "get_unique_file_info_hwnd"
- c_getUniqueFileInfo :: HANDLE -> Ptr Word64 -> Ptr Word64 -> IO ()
+ _c_getUniqueFileInfo :: HANDLE -> Ptr Word64 -> Ptr Word64 -> IO ()
-- | getUniqueFileInfo assumes the C call to getUniqueFileInfo
-- succeeds.
+{-# NOINLINE getUniqueFileInfo #-}
getUniqueFileInfo :: RawHandle a => a -> IO (Word64, Word64)
getUniqueFileInfo handle = do
with 0 $ \devptr -> do
=====================================
libraries/ghc-internal/src/GHC/Internal/System/IO.hs
=====================================
@@ -738,7 +738,10 @@ openTempFile' loc tmp_dir template binary mode
foreign import ccall "getTempFileNameErrorNo" c_getTempFileNameErrorNo
:: CWString -> CWString -> CWString -> CUInt -> Ptr CWchar -> IO Bool
-foreign import ccall "__createUUIDTempFileErrNo" c_createUUIDTempFileErrNo
+{-# NOINLINE c_createUUIDTempFileErrNo #-}
+c_createUUIDTempFileErrNo :: CWString -> CWString -> CWString -> Ptr CWString -> IO Bool
+c_createUUIDTempFileErrNo = _c_createUUIDTempFileErrNo
+foreign import ccall "__createUUIDTempFileErrNo" _c_createUUIDTempFileErrNo
:: CWString -> CWString -> CWString -> Ptr CWString -> IO Bool
pathSeparator :: String -> Bool
=====================================
libraries/ghc-internal/src/GHC/Internal/System/Posix/Internals.hs
=====================================
@@ -747,8 +747,12 @@ foreign import capi unsafe "HsBase.h _unlink"
foreign import capi unsafe "HsBase.h _utime"
c_utime :: CString -> Ptr CUtimbuf -> IO CInt
+
+{-# NOINLINE c_getpid #-}
+c_getpid :: IO CPid
+c_getpid = _c_getpid
foreign import capi unsafe "HsBase.h _getpid"
- c_getpid :: IO CPid
+ _c_getpid :: IO CPid
#else
-- We use CAPI as on some OSs (eg. Linux) this is wrapped by a macro
-- which redirects to the 64-bit-off_t versions when large file
@@ -833,8 +837,11 @@ foreign import capi unsafe "HsBase.h utime"
c_getpid :: IO CPid
c_getpid = pure 1
#else
+{-# NOINLINE c_getpid #-}
+c_getpid :: IO CPid
+c_getpid = _c_getpid
foreign import ccall unsafe "HsBase.h getpid"
- c_getpid :: IO CPid
+ _c_getpid :: IO CPid
#endif
#endif
@@ -924,7 +931,10 @@ foreign import ccall unsafe "HsBase.h __hscore_o_wronly" o_WRONLY :: CInt
foreign import ccall unsafe "HsBase.h __hscore_o_rdwr" o_RDWR :: CInt
foreign import ccall unsafe "HsBase.h __hscore_o_append" o_APPEND :: CInt
foreign import ccall unsafe "HsBase.h __hscore_o_creat" o_CREAT :: CInt
-foreign import ccall unsafe "HsBase.h __hscore_o_excl" o_EXCL :: CInt
+{-# NOINLINE o_EXCL #-}
+o_EXCL :: CInt
+o_EXCL = _o_EXCL
+foreign import ccall unsafe "HsBase.h __hscore_o_excl" _o_EXCL :: CInt
foreign import ccall unsafe "HsBase.h __hscore_o_trunc" o_TRUNC :: CInt
-- non-POSIX flags.
=====================================
libraries/ghc-internal/src/GHC/Internal/Windows.hs
=====================================
@@ -212,13 +212,19 @@ failUnlessSuccessOr val fn_name act = do
-- by @GetLastError@.
-- | Map the last system error to an errno value, and assign it to @errno@.
+{-# NOINLINE c_maperrno #-}
+c_maperrno :: IO ()
+c_maperrno = _c_maperrno
foreign import ccall unsafe "maperrno" -- in Win32Utils.c
- c_maperrno :: IO ()
+ _c_maperrno :: IO ()
-- | Pure function variant of 'c_maperrno' that does not call @GetLastError@
-- or modify @errno@.
+{-# NOINLINE c_maperrno_func #-}
+c_maperrno_func :: ErrCode -> Errno
+c_maperrno_func = _c_maperrno_func
foreign import ccall unsafe "maperrno_func" -- in Win32Utils.c
- c_maperrno_func :: ErrCode -> Errno
+ _c_maperrno_func :: ErrCode -> Errno
foreign import ccall unsafe "base_getErrorMessage" -- in Win32Utils.c
c_getErrorMessage :: DWORD -> IO LPWSTR
=====================================
libraries/text
=====================================
@@ -1 +1 @@
-Subproject commit 423fd981e576bd17a8b5fa48d0ad6b9a0c370e77
+Subproject commit a1e9d389911eb613f2951364b9203be92ebc3cfa
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/7a30f39155df40a30d3f265477b154b…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/7a30f39155df40a30d3f265477b154b…
You're receiving this email because of your account on gitlab.haskell.org.
1
0