[Git][ghc/ghc][wip/jeltsch/detecting-os-handle-types] 10 commits: ci: update darwin boot ghc to 9.10.3
Wolfgang Jeltsch pushed to branch wip/jeltsch/detecting-os-handle-types at Glasgow Haskell Compiler / GHC Commits: 50761451 by Cheng Shao at 2026-01-27T21:51:23-05:00 ci: update darwin boot ghc to 9.10.3 This patch updates darwin boot ghc to 9.10.3, along with other related updates, and pays off some technical debt here: - Update `nixpkgs` and use the `nixpkgs-25.05-darwin` channel. - Update the `niv` template. - Update LLVM to 21 and update `llvm-targets` to reflect LLVM 21 layout changes for arm64/x86_64 darwin targets. - Use `stdenvNoCC` to prevent nix packaged apple sdk from being used by boot ghc, and manually set `DEVELOPER_DIR`/`SDKROOT` to enforce the usage of system-wide command line sdk for macos. - When building nix derivation for boot ghc, run `configure` via the `arch` command so that `configure` and its subprocesses pick up the manually specified architecture. - Remove the previous horrible hack that obliterates `configure` to make autoconf test result in true. `configure` now properly does its job. - Remove the now obsolete configure args and post install settings file patching logic. - Use `scheme-small` for texlive to avoid build failures in certain unused texlive packages, especially on x86_64-darwin. - - - - - 94dcd15e by Matthew Pickering at 2026-01-27T21:52:05-05:00 Evaluate backtraces for "error" exceptions at the moment they are thrown See Note [Capturing the backtrace in throw] and Note [Hiding precise exception signature in throw] which explain the implementation. This commit makes `error` and `throw` behave the same with regard to backtraces. Previously, exceptions raised by `error` would not contain useful IPE backtraces. I did try and implement `error` in terms of `throw` but it started to involve putting diverging functions into hs-boot files, which seemed to risky if the compiler wouldn't be able to see if applying a function would diverge. CLC proposal: https://github.com/haskell/core-libraries-committee/issues/383 Fixes #26751 - - - - - ef35e3ea by Teo Camarasu at 2026-01-27T21:52:46-05:00 ghc-internal: move all Data instances to Data.Data Most instances of Data are defined in GHC.Internal.Data.Data. Let's move all remaining instance there. This moves other modules down in the dependency hierarchy allowing for more parallelism, and it decreases the likelihood that we would need to load this heavy .hi file if we don't actually need it. Resolves #26830 Metric Decrease: T12227 T16875 - - - - - 5e0ec555 by sheaf at 2026-01-28T06:56:38-05:00 Add test case for #25679 This commit adds the T25679 test case. The test now passes, thanks to commit 1e53277af36d3f0b6ad5491f70ffc5593a49dcfd. Fixes #25679 - - - - - f1cd1611 by sheaf at 2026-01-28T06:56:38-05:00 Improve defaulting of representational equalities This commit makes the defaulting of representational equalities, introduced in 1e53277a, a little bit more robust. Now, instead of calling the eager unifier, it calls the full-blown constraint solver, which means that it can handle some subtle situations, e.g. involving functional dependencies and type-family injectivity annotations, such as: type family F a = r | r -> a type instance F Int = Bool [W] F beta ~R Bool - - - - - 25edf516 by sheaf at 2026-01-28T06:56:38-05:00 Improve errors for unsolved representational equalities This commit adds a new field of CtLoc, CtExplanations, which allows the typechecker to leave some information about what it has done. For the moment, it is only used to improve error messages for unsolved representational equalities. The typechecker will now accumulate, when unifying at representational role: - out-of-scope newtype constructors, - type constructors that have nominal role in a certain argument, - over-saturated type constructors, - AppTys, e.g. `c a ~R# c b`, to report that we must assume that 'c' has nominal role in its parameters, - data family applications that do not reduce, potentially preventing newtype unwrapping. Now, instead of having to re-construct the possible errors after the fact, we simply consult the CtExplanations field. Additionally, this commit modifies the typechecker error messages that concern out-of-scope newtype constructors. The error message now depends on whether we have an import suggestion to provide to the user: - If we have an import suggestion for the newtype constructor, the message will be of the form: The data constructor MkN of the newtype N is out of scope Suggested fix: add 'MkN' to the import list in the import of 'M' - If we don't have any import suggestions, the message will be of the form: NB: The type 'N' is an opaque newtype, whose constructor is hidden Fixes #15850, #20289, #20468, #23731, #25949, #26137 - - - - - 4d0e6da1 by Simon Peyton Jones at 2026-01-28T06:57:19-05:00 Fix two bugs in short-cut constraint solving There are two main changes here: * Use `isSolvedWC` rather than `isEmptyWC` in `tryShortCutSolver` The residual constraint may have some fully-solved, but still-there implications, and we don't want them to abort short cut solving! That bug caused #26805. * In the short-cut solver, we abandon the fully-solved residual constraint; but we may thereby lose track of Givens that are needed, and either report them as redundant or prune evidence bindings that are in fact needed. This bug stopped the `constraints` package from compiling; see the trail in !15389. The second bug led me to (another) significant refactoring of the mechanism for tracking needed EvIds. See the new Note [Tracking needed EvIds] in GHC.Tc.Solver.Solve It's simpler and much less head-scratchy now. Some particulars: * An EvBindsVar now tracks NeededEvIds * We deal with NeededEvIds for an implication only when it is fully solved. Much simpler! * `tryShortCutTcS` now takes a `TcM WantedConstraints` rather than `TcM Bool`, so that is can plumb the needed EvIds correctly. * Remove `ic_need` and `ic_need_implic` from Implication (hooray), and add `ics_dm` and `ics_non_dm` to `IC_Solved`. Pure refactor * Shorten data constructor `CoercionHole` to `CH`, following general practice in GHC. * Rename `EvBindMap` to `EvBindsMap` for consistency - - - - - 662480b7 by Cheng Shao at 2026-01-28T06:58:00-05:00 ci: use debian validate bindists instead of fedora release bindists in testing stage This patch changes the `abi-test`, `hadrian-multi` and `perf` jobs in the full-ci pipeline testing stage to use debian validate bindists instead of fedora release bindists, to increase pipeline level parallelism and allow full-ci pipelines to complete earlier. Closes #26818. - - - - - 39581ec6 by Cheng Shao at 2026-01-28T06:58:40-05:00 ci: run perf test with -j$cores This patch makes the perf ci job compile Cabal with -j$cores to speed up the job. - - - - - ea3b1e5e by Wolfgang Jeltsch at 2026-01-28T14:14:39+02:00 Add OS handle type detection to `base` It is deliberate that this addition to `base` does not simply reflect the `conditional`/`` operation currently in `GHC.IO.SubSystem` but simply uses the value of a custom enumeration type to describe the type of OS handles currently in use. The reason for using this approach is that it is simpler and at the same type more future-proof: if a new OS handle type should be introduced in the future, it would only be necessary to add another value to `OSHandleType`, and user code that uses fallback branches in case distinctions regarding OS handle types would continue to be compilable at least; `conditional`, on the other hand, would have to have its argument count changed and `` could not even be used as an infix operator anymore. Since Haskell has `case` expressions, there is no real need to have a case-distinguishing operation like `conditional`/``. - - - - - 129 changed files: - .gitlab-ci.yml - .gitlab/ci.sh - .gitlab/darwin/nix/sources.json - .gitlab/darwin/toolchain.nix - compiler/GHC/Core/Coercion.hs - compiler/GHC/Core/FamInstEnv.hs - compiler/GHC/Core/Predicate.hs - compiler/GHC/Core/TyCo/Rep.hs - compiler/GHC/Core/TyCo/Subst.hs - compiler/GHC/Core/TyCo/Tidy.hs - compiler/GHC/Core/TyCon/RecWalk.hs - compiler/GHC/Data/Maybe.hs - compiler/GHC/HsToCore/Pmc/Solver.hs - compiler/GHC/Rename/Unbound.hs - compiler/GHC/Tc/Errors.hs - compiler/GHC/Tc/Errors/Ppr.hs - compiler/GHC/Tc/Errors/Types.hs - compiler/GHC/Tc/Gen/Default.hs - compiler/GHC/Tc/Gen/Expr.hs - compiler/GHC/Tc/Instance/Family.hs - compiler/GHC/Tc/Solver/Default.hs - compiler/GHC/Tc/Solver/Dict.hs - compiler/GHC/Tc/Solver/Equality.hs - compiler/GHC/Tc/Solver/InertSet.hs - compiler/GHC/Tc/Solver/Monad.hs - compiler/GHC/Tc/Solver/Solve.hs - compiler/GHC/Tc/TyCl/Instance.hs - compiler/GHC/Tc/Types/Constraint.hs - compiler/GHC/Tc/Types/CtLoc.hs - compiler/GHC/Tc/Types/Evidence.hs - compiler/GHC/Tc/Types/Origin.hs - compiler/GHC/Tc/Utils/Monad.hs - compiler/GHC/Tc/Utils/TcMType.hs - compiler/GHC/Tc/Utils/Unify.hs - compiler/GHC/Tc/Zonk/TcType.hs - compiler/GHC/Tc/Zonk/Type.hs - compiler/GHC/Types/Error/Codes.hs - compiler/GHC/Types/RepType.hs - compiler/GHC/Types/Var.hs - compiler/GHC/Utils/Monad.hs - compiler/GHC/Utils/Trace.hs - libraries/base/changelog.md - libraries/base/src/System/IO/OS.hs - libraries/base/tests/IO/all.T - libraries/base/tests/IO/osHandles001FileDescriptors.hs - libraries/base/tests/IO/osHandles001FileDescriptors.stdout - libraries/base/tests/IO/osHandles001WindowsHandles.hs - libraries/base/tests/IO/osHandles001WindowsHandles.stdout - libraries/base/tests/IO/osHandles002FileDescriptors.hs - libraries/base/tests/IO/osHandles002FileDescriptors.stdout - libraries/base/tests/IO/osHandles002WindowsHandles.hs - libraries/base/tests/IO/osHandles002WindowsHandles.stdout - + libraries/base/tests/IO/osHandles003FileDescriptors.hs - libraries/base/tests/IO/osHandles002FileDescriptors.stderr → libraries/base/tests/IO/osHandles003FileDescriptors.stderr - libraries/base/tests/IO/osHandles002FileDescriptors.stdin → libraries/base/tests/IO/osHandles003FileDescriptors.stdin - libraries/base/tests/IO/osHandles002WindowsHandles.stdin → libraries/base/tests/IO/osHandles003FileDescriptors.stdout - + libraries/base/tests/IO/osHandles003WindowsHandles.hs - libraries/base/tests/IO/osHandles002WindowsHandles.stderr → libraries/base/tests/IO/osHandles003WindowsHandles.stderr - + libraries/base/tests/IO/osHandles003WindowsHandles.stdin - + libraries/base/tests/IO/osHandles003WindowsHandles.stdout - libraries/base/tests/T23454.stderr - libraries/ghc-internal/src/GHC/Internal/Data/Data.hs - libraries/ghc-internal/src/GHC/Internal/Err.hs - libraries/ghc-internal/src/GHC/Internal/Exts.hs - libraries/ghc-internal/src/GHC/Internal/Functor/ZipList.hs - libraries/ghc-internal/src/GHC/Internal/System/IO/OS.hs - libraries/ghc-internal/tests/stack-annotation/all.T - + libraries/ghc-internal/tests/stack-annotation/ann_frame005.hs - + libraries/ghc-internal/tests/stack-annotation/ann_frame005.stdout - llvm-targets - + testsuite/tests/default/T25825.hs - testsuite/tests/default/all.T - testsuite/tests/deriving/should_fail/T1496.stderr - testsuite/tests/deriving/should_fail/T4846.stderr - testsuite/tests/deriving/should_fail/T5498.stderr - testsuite/tests/deriving/should_fail/T6147.stderr - testsuite/tests/deriving/should_fail/T7148.stderr - testsuite/tests/deriving/should_fail/T7148a.stderr - testsuite/tests/deriving/should_fail/T8984.stderr - testsuite/tests/deriving/should_fail/deriving-via-fail.stderr - testsuite/tests/deriving/should_fail/deriving-via-fail4.stderr - testsuite/tests/deriving/should_fail/deriving-via-fail5.stderr - testsuite/tests/gadt/CasePrune.stderr - testsuite/tests/ghci.debugger/scripts/T8487.stdout - testsuite/tests/ghci.debugger/scripts/break011.stdout - testsuite/tests/ghci.debugger/scripts/break017.stdout - testsuite/tests/ghci.debugger/scripts/break025.stdout - testsuite/tests/indexed-types/should_fail/T9580.stderr - testsuite/tests/interface-stability/base-exports.stdout - testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs - testsuite/tests/interface-stability/base-exports.stdout-mingw32 - testsuite/tests/interface-stability/base-exports.stdout-ws-32 - testsuite/tests/interface-stability/ghc-experimental-exports.stdout - testsuite/tests/interface-stability/ghc-experimental-exports.stdout-mingw32 - testsuite/tests/linear/should_fail/LinearRole.stderr - testsuite/tests/roles/should_fail/RolesIArray.stderr - + testsuite/tests/simplCore/should_compile/T26805.hs - + testsuite/tests/simplCore/should_compile/T26805.stderr - testsuite/tests/simplCore/should_compile/all.T - + testsuite/tests/typecheck/should_compile/T26805a.hs - testsuite/tests/typecheck/should_compile/all.T - testsuite/tests/typecheck/should_fail/T10285.stderr - testsuite/tests/typecheck/should_fail/T10534.stderr - testsuite/tests/typecheck/should_fail/T10715b.stderr - testsuite/tests/typecheck/should_fail/T11347.stderr - testsuite/tests/typecheck/should_fail/T15801.stderr - + testsuite/tests/typecheck/should_fail/T15850.hs - + testsuite/tests/typecheck/should_fail/T15850.stderr - + testsuite/tests/typecheck/should_fail/T15850_Lib.hs - + testsuite/tests/typecheck/should_fail/T20289.hs - + testsuite/tests/typecheck/should_fail/T20289.stderr - + testsuite/tests/typecheck/should_fail/T20289_A.hs - testsuite/tests/typecheck/should_fail/T22645.stderr - testsuite/tests/typecheck/should_fail/T22924a.stderr - + testsuite/tests/typecheck/should_fail/T23731.hs - + testsuite/tests/typecheck/should_fail/T23731.stderr - + testsuite/tests/typecheck/should_fail/T23731b.hs - + testsuite/tests/typecheck/should_fail/T23731b.stderr - + testsuite/tests/typecheck/should_fail/T23731b_aux.hs - + testsuite/tests/typecheck/should_fail/T25679.hs - + testsuite/tests/typecheck/should_fail/T25679.stderr - + testsuite/tests/typecheck/should_fail/T25949.hs - + testsuite/tests/typecheck/should_fail/T25949.stderr - + testsuite/tests/typecheck/should_fail/T25949_aux.hs - + testsuite/tests/typecheck/should_fail/T26137.hs - + testsuite/tests/typecheck/should_fail/T26137.stderr - testsuite/tests/typecheck/should_fail/TcCoercibleFail.stderr - testsuite/tests/typecheck/should_fail/TcCoercibleFail3.stderr - testsuite/tests/typecheck/should_fail/all.T The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/3f8d806e9421db25e2773b674ac45ab... -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/3f8d806e9421db25e2773b674ac45ab... You're receiving this email because of your account on gitlab.haskell.org.
participants (1)
-
Wolfgang Jeltsch (@jeltsch)