Simon Peyton Jones pushed to branch wip/T23162-part2 at Glasgow Haskell Compiler / GHC Commits: 3bfe7aa2 by Matthew Pickering at 2025-12-07T12:18:57-05:00 ci: Try using multi repl in ghc-in-ghci test This should be quite a bit faster than the ./hadrian/ghci command as it doesn't properly build all the dependencies. - - - - - 2ef1601a by Rodrigo Mesquita at 2025-12-07T12:19:38-05:00 Stack.Decode: Don't error on bitmap size 0 A RET_BCO may have a bitmap with no payload. In that case, the bitmap = 0. One can observe this by using -ddump-bcos and interpreting ``` main = pure () ``` Observe, for instance, that the BCO for this main function has size 0: ``` ProtoBCO Main.main#0: \u [] break<main:Main,0>() GHC.Internal.Base.pure GHC.Internal.Base.$fApplicativeIO GHC.Internal.Tuple.() bitmap: 0 [] BRK_FUN <breakarray> main:Main 0 <cc> PACK () 0 PUSH_G GHC.Internal.Base.$fApplicativeIO PUSH_APPLY_PP PUSH_G GHC.Internal.Base.pure ENTER ``` Perhaps we never tried to decode a stack in which a BCO like this was present. However, for the debugger, we want to decode stacks of threads stopped at breakpoints, and these kind of BCOs do get on a stack under e.g. `stg_apply_interp_info` frames. See the accompanying test in the next commit for an example to trigger the bug this commit fixes. Fixes #26640 - - - - - 747153d2 by Rodrigo Mesquita at 2025-12-07T12:19:38-05:00 Add test for #26640 - - - - - d4b1e353 by Simon Hengel at 2025-12-10T00:00:02-05:00 Fix syntax error in gadt_syntax.rst - - - - - 91cc8be6 by Cheng Shao at 2025-12-10T00:00:43-05:00 ci: fix "ci.sh clean" to address frequent out of space error on windows runners This patch fixes the `ci.sh clean` logic to address frequent out of space error on windows runners; previously it didn't clean up the inplace mingw blobs, which is the largest source of space leak on windows runners. See added comment for detailed explanation. - - - - - fe2b79f4 by Recursion Ninja at 2025-12-10T08:34:18-05:00 Narrow before optimising MUL/DIV/REM into shifts The MUL/DIV/REM operations can be optimised into shifts when one of the operands is a constant power of 2. However, as literals in Cmm are stored as 'Integer', for this to be correct we first need to narrow the literal to the appropriate width before checking whether the literal is a power of 2. Fixes #25664 - - - - - 06c2349c by Recursion Ninja at 2025-12-10T08:34:58-05:00 Decouple 'Language.Haskell.Syntax.Type' from 'GHC.Utils.Panic' - Remove the *original* defintion of 'hsQTvExplicit' defined within 'Language.Haskell.Syntax.Type' - Redefine 'hsQTvExplicit' as 'hsq_explicit' specialized to 'GhcPass' exported by 'GHC.Utils.Panic' - Define 'hsQTvExplicitBinders' as 'hsq_explicit' specialized to 'DocNameI' exported by 'Haddock.GhcUtils'. - Replace all call sites of the original 'hsQTvExplicit' definition with either: 1. 'hsQTvExplicit' updated definition 2. 'hsQTvExplicitBinders' All call sites never entered the 'XLHsQTyVars' constructor branch, but a call to 'panic' existed on this code path because the type system was not strong enought to guarantee that the 'XLHsQTyVars' construction was impossible. These two specialized functions provide the type system with enough information to make that guarantee, and hence the dependancy on 'panic' can be removed. - - - - - ac0815d5 by sheaf at 2025-12-10T23:39:57-05:00 Quantify arg before mult in function arrows As noted in #23764, we expect quantification order to be left-to-right, so that in a type such as a %m -> b the inferred quantification order should be [a, m, b] and not [m, a, b]. This was addressed in commit d31fbf6c, but that commit failed to update some other functions such as GHC.Core.TyCo.FVs.tyCoFVsOfType. This affects Haddock, as whether we print an explicit forall or not depends on whether the inferred quantification order matches the actual quantification order. - - - - - 2caf796e by sheaf at 2025-12-10T23:39:57-05:00 Haddock: improvements to ty-var quantification This commit makes several improvements to how Haddock deals with the quantification of type variables: 1. In pattern synonyms, Haddock used to jumble up universal and existential quantification. That is now fixed, fixing #26252. Tested in the 'PatternSyns2' haddock-html test. 2. The logic for computing whether to use an explicit kind annotation for a type variable quantified in a forall was not even wrong. This commit improves the heuristic, but it will always remain an imperfect heuristic (lest we actually run kind inference again). In the future (#26271), we hope to avoid reliance on this heuristic. - - - - - b14bdd59 by Teo Camarasu at 2025-12-10T23:40:38-05:00 Add explicit export list to GHC.Num Let's make clear what this module exports to allow us to easily deprecate and remove some of these in the future. Resolves https://gitlab.haskell.org/ghc/ghc/-/issues/26625 - - - - - d99f8326 by Cheng Shao at 2025-12-11T19:14:18-05:00 compiler: remove unused CPP code in foreign stub This patch removes unused CPP code in the generated foreign stub: - `#define IN_STG_CODE 0` is not needed, since `Rts.h` already includes this definition - The `if defined(__cplusplus)` code paths are not needed in the `.c` file, since we don't generate C++ stubs and don't include C++ headers in our stubs. But it still needs to be present in the `.h` header since it might be later included into C++ source files. - - - - - 46c9746f by Cheng Shao at 2025-12-11T19:14:57-05:00 configure: bump LlvmMaxVersion to 22 This commit bumps LlvmMaxVersion to 22; 21.x releases have been available since Aug 26th, 2025 and there's no regressions with 21.x so far. This bump is also required for updating fedora image to 43. - - - - - 96fce8d0 by Cheng Shao at 2025-12-12T01:17:51+01:00 hadrian: add support for building with UndefinedBehaviorSanitizer This patch adds a +ubsan flavour transformer to hadrian to build all stage1+ C/C++ code with UndefinedBehaviorSanitizer. This is particularly useful to catch potential undefined behavior in the RTS codebase. - - - - - f7a06d8c by Cheng Shao at 2025-12-12T01:17:51+01:00 ci: update alpine/fedora & add ubsan job This patch updates alpine image to 3.23, fedora image to 43, and adds a `x86_64-linux-fedora43-validate+debug_info+ubsan` job that's run in validate/nightly pipelines to catch undefined behavior in the RTS codebase. - - - - - 2ccd11ca by Cheng Shao at 2025-12-12T01:17:51+01:00 rts: fix zero-length VLA undefined behavior in interpretBCO This commit fixes a zero-length VLA undefined behavior in interpretBCO, caught by UBSan: ``` +rts/Interpreter.c:3133:19: runtime variable length array bound evaluates to non-positive value 0 ``` - - - - - 4156ed19 by Cheng Shao at 2025-12-12T01:17:51+01:00 rts: fix unaligned ReadSpB in interpretBCO This commit fixes unaligned ReadSpB in interpretBCO, caught by UBSan: ``` +rts/Interpreter.c:2174:64: runtime load of misaligned address 0x004202059dd1 for type 'StgWord', which requires 8 byte alignment ``` To perform proper unaligned read, we define StgUnalignedWord as a type alias of StgWord with aligned(1) attribute, and load StgUnalignedWord instead of StgWord in ReadSpB, so the C compiler is aware that we're not loading with natural alignment. - - - - - fef89fb9 by Cheng Shao at 2025-12-12T01:17:51+01:00 rts: fix signed integer overflow in subword arithmetic in interpretBCO This commit fixes signed integer overflow in subword arithmetic in interpretBCO, see added note for detailed explanation. - - - - - 3c001377 by Cheng Shao at 2025-12-13T05:03:15-05:00 ci: use treeless fetch for perf notes This patch improves the ci logic for fetching perf notes by using treeless fetch (https://github.blog/open-source/git/get-up-to-speed-with-partial-clone-and-s...), to avoid downloading all blobs of the perf notes repo at once, and only fetch the actually required blobs on-demand when needed. This makes the initial `test-metrics.sh pull` operation much faster, and also more robust, since we are seeing an increasing rate of 504 errors in CI when fetching all perf notes at once, which is a major source of CI flakiness at this point. Co-authored-by: Codex <codex@openai.com> - - - - - 123a8d77 by Peter Trommler at 2025-12-13T05:03:57-05:00 Cmm: remove restriction in MachOp folding - - - - - 0b54b5fd by Andreas Klebinger at 2025-12-13T05:04:38-05:00 Remove explicit Typeable deriviations. - - - - - 08b13f7b by Cheng Shao at 2025-12-13T05:05:18-05:00 ci: set gc.auto=0 during setup stage This patch sets `gc.auto=0` during `setup` stage of CI, see added comment for detailed explanation. - - - - - 3b5aecb5 by Ben Gamari at 2025-12-13T23:43:10+01:00 Bump exceptions submodule to 0.10.11 - - - - - c32de3b0 by Johan Förberg at 2025-12-15T02:36:03-05:00 base: Define Semigroup and Monoid instances for lazy ST CLC proposal: https://github.com/haskell/core-libraries-committee/issues/374 Fixes #26581 - - - - - 4f8b660c by mangoiv at 2025-12-15T02:37:05-05:00 ci: do not require nightly cabal-reinstall job to succeed - - - - - 2c2a3ef3 by Cheng Shao at 2025-12-15T11:51:53-05:00 docs: drop obsolete warning about -fexternal-interpreter on windows This patch drops an obsolete warning about -fexternal-interpreter not supported on windows; it is supported since a long time ago, including the profiled way. - - - - - 68573aa5 by Marc Scholten at 2025-12-15T11:53:00-05:00 haddock: Drop Haddock.Backends.HaddockDB as it's unused - - - - - 924df511 by Simon Peyton Jones at 2025-12-16T10:06:48+00:00 Improved fundeps for closed type families The big payload of this commit is to execute the plan suggested in #23162, by improving the way that we generate functional dependencies for closed type families. It is all described in Note [Exploiting closed type families] Most of the changes are in GHC.Tc.Solver.FunDeps Other small changes * GHC.Tc.Solver.bumpReductionDepth. This function brings together the code that * Bumps the depth * Checks for overflow Previously the two were separated, sometimes quite widely. * GHC.Core.Unify.niFixSubst: minor improvement, removing an unnecessary itraetion in the base case. * GHC.Core.Unify: no need to pass an InScopeSet to tcUnifyTysForInjectivity. It can calculate one for itself; and it is never inspected anyway so it's free to do so. * GHC.Tc.Errors.Ppr: slight impovement to the error message for reduction-stack overflow, when a constraint (rather than a type) is involved. * GHC.Tc.Solver.Monad.wrapUnifier: small change to the API - - - - - 78ac1a6e by Simon Peyton Jones at 2025-12-16T10:06:48+00:00 Add missing (KK4) to kick-out criteria There was a missing case in kick-out that meant we could fail to solve an eminently-solvable constraint. See the new notes about (KK4) - - - - - 94503ad4 by Simon Peyton Jones at 2025-12-16T10:06:48+00:00 Some small refactorings of error reporting in the typechecker This is just a tidy-up commit. * Add ei_insoluble to ErrorItem, to cache insolubility. Small tidy-up. * Remove `is_ip` and `mkIPErr` from GHC.Tc.Errors; instead enhance mkDictErr to handle implicit parameters. Small refactor. - - - - - c6122dfc by Simon Peyton Jones at 2025-12-16T10:06:48+00:00 Better fundeps for type-family Givens This commit addresses #22652, by recording when the fundeps for a constraint are definitely insoluble. That in turn improves the perspicacity of the pattern-match overlap checker. See Note [Insoluble fundeps] - - - - - 44aea088 by Simon Peyton Jones at 2025-12-16T10:06:48+00:00 Error message wibbles - - - - - 113 changed files: - .gitlab-ci.yml - .gitlab/ci.sh - .gitlab/generate-ci/gen_ci.hs - .gitlab/jobs.yaml - .gitlab/rel_eng/fetch-gitlab-artifacts/fetch_gitlab.py - .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py - .gitlab/test-metrics.sh - compiler/GHC/Cmm/Opt.hs - compiler/GHC/Core/FamInstEnv.hs - compiler/GHC/Core/TyCo/FVs.hs - compiler/GHC/Core/TyCo/Rep.hs - compiler/GHC/Core/TyCon.hs - compiler/GHC/Core/Unify.hs - compiler/GHC/Driver/CodeOutput.hs - compiler/GHC/Hs/Type.hs - compiler/GHC/HsToCore/Monad.hs - compiler/GHC/Tc/Errors.hs - compiler/GHC/Tc/Errors/Ppr.hs - compiler/GHC/Tc/Errors/Types.hs - compiler/GHC/Tc/Gen/Splice.hs - compiler/GHC/Tc/Solver.hs - compiler/GHC/Tc/Solver/Default.hs - compiler/GHC/Tc/Solver/Dict.hs - compiler/GHC/Tc/Solver/Equality.hs - compiler/GHC/Tc/Solver/FunDeps.hs - compiler/GHC/Tc/Solver/InertSet.hs - compiler/GHC/Tc/Solver/Monad.hs - compiler/GHC/Tc/Solver/Rewrite.hs - compiler/GHC/Tc/Types/Constraint.hs - compiler/GHC/Tc/Types/CtLoc.hs - compiler/GHC/Tc/Utils/Monad.hs - compiler/GHC/Tc/Utils/TcMType.hs - compiler/GHC/Tc/Utils/TcType.hs - compiler/GHC/Tc/Utils/Unify.hs - compiler/GHC/Types/TyThing.hs - compiler/Language/Haskell/Syntax/Type.hs - configure.ac - docs/users_guide/exts/gadt_syntax.rst - docs/users_guide/ghci.rst - hadrian/doc/flavours.md - hadrian/src/Flavour.hs - hadrian/src/Hadrian/Haskell/Cabal/Type.hs - hadrian/src/Hadrian/Haskell/Hash.hs - hadrian/src/Hadrian/Oracles/ArgsHash.hs - hadrian/src/Hadrian/Oracles/Cabal/Type.hs - hadrian/src/Hadrian/Oracles/DirectoryContents.hs - hadrian/src/Hadrian/Oracles/Path.hs - hadrian/src/Hadrian/Oracles/TextFile.hs - hadrian/src/Hadrian/Utilities.hs - hadrian/src/Oracles/Flavour.hs - hadrian/src/Oracles/ModuleFiles.hs - libraries/base/changelog.md - libraries/base/src/GHC/Num.hs - libraries/exceptions - libraries/ghc-internal/src/GHC/Internal/Control/Monad/ST/Lazy/Imp.hs - libraries/ghc-internal/src/GHC/Internal/Stack/Decode.hs - linters/lint-codes/LintCodes/Static.hs - + rts/.ubsan-suppressions - rts/Interpreter.c - rts/include/stg/Types.h - rts/rts.cabal - testsuite/driver/testglobals.py - testsuite/driver/testlib.py - + testsuite/tests/bytecode/T26640.hs - + testsuite/tests/bytecode/T26640.script - + testsuite/tests/bytecode/T26640.stdout - testsuite/tests/bytecode/all.T - + testsuite/tests/cmm/opt/T25664.hs - + testsuite/tests/cmm/opt/T25664.stdout - testsuite/tests/cmm/opt/all.T - testsuite/tests/indexed-types/should_compile/CEqCanOccursCheck.hs - testsuite/tests/indexed-types/should_fail/T12522a.hs - testsuite/tests/indexed-types/should_fail/T26176.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/pmcheck/should_compile/T15753c.hs - + testsuite/tests/pmcheck/should_compile/T22652.hs - testsuite/tests/pmcheck/should_compile/all.T - testsuite/tests/quantified-constraints/T15316A.stderr - testsuite/tests/quantified-constraints/T17267.stderr - testsuite/tests/quantified-constraints/T17267a.stderr - testsuite/tests/quantified-constraints/T17267b.stderr - testsuite/tests/quantified-constraints/T17267c.stderr - testsuite/tests/quantified-constraints/T17267e.stderr - testsuite/tests/quantified-constraints/T17458.stderr - testsuite/tests/typecheck/should_compile/T16188.hs - testsuite/tests/typecheck/should_fail/ContextStack1.stderr - testsuite/tests/typecheck/should_fail/FunDepOrigin1b.stderr - testsuite/tests/typecheck/should_fail/T15767.stderr - testsuite/tests/typecheck/should_fail/T19415.stderr - testsuite/tests/typecheck/should_fail/T19415b.stderr - testsuite/tests/typecheck/should_fail/T22924b.stderr - + testsuite/tests/typecheck/should_fail/T23162b.hs - + testsuite/tests/typecheck/should_fail/T23162b.stderr - + testsuite/tests/typecheck/should_fail/T23162c.hs - + testsuite/tests/typecheck/should_fail/T23162d.hs - testsuite/tests/typecheck/should_fail/TcCoercibleFail.stderr - testsuite/tests/typecheck/should_fail/all.T - utils/haddock/haddock-api/haddock-api.cabal - − utils/haddock/haddock-api/src/Haddock/Backends/HaddockDB.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/html-test/ref/Bug1050.html - utils/haddock/html-test/ref/LinearTypes.html - utils/haddock/html-test/ref/PatternSyns.html - + utils/haddock/html-test/ref/PatternSyns2.html - utils/haddock/html-test/ref/TypeOperators.html - + utils/haddock/html-test/src/PatternSyns2.hs - utils/haddock/latex-test/ref/LinearTypes/LinearTypes.tex The diff was not included because it is too large. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/bfff257ca6d35572eec23ae84a8cb87... -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/bfff257ca6d35572eec23ae84a8cb87... You're receiving this email because of your account on gitlab.haskell.org.
participants (1)
-
Simon Peyton Jones (@simonpj)