[Git][ghc/ghc][wip/9.12.3-backports] 59 commits: We can't UNPACK multi-constructor GADTs
Zubin pushed to branch wip/9.12.3-backports at Glasgow Haskell Compiler / GHC Commits: 2e8f607d by Simon Peyton Jones at 2025-08-26T18:39:32+05:30 We can't UNPACK multi-constructor GADTs This MR fixes #25672 See Note [Unpacking GADTs and existentials] in GHC.Types.Id.Make (cherry picked from commit b6d5b09103dea97351774c5ab34082165504b997) - - - - - 82fc4bc1 by sheaf at 2025-08-26T18:39:32+05:30 user's guide: consolidate defaulting documentation This commit adds a new section on defaulting, which consolidates various parts of documentation surrounding defaulting into one central place. It explains type class defaulting in detail, extensions to it with OverloadedStrings, NamedDefaults and ExtendedDefaultRules, as well as other defaulting mechanisms (e.g. kind-based defaulting such as RuntimeRep defaulting, and defaulting of equalities). (cherry picked from commit 37d8b50b6de8ee69ea26196fd3869fe0a83e5802) - - - - - 36352ddf by sheaf at 2025-08-26T18:39:32+05:30 user's guide: flesh out XOverloadedStrings docs This commit extends the documentation of the OverloadedStrings extension with some usage information, in particular suggestions to: - use default declarations, such as `default (Text)` or `default IsString(Text)` (with the NamedDefaults extension), - enable the ExtendedDefaultRules extension to relax the requirement that a defaultable type variable must only appear in unary standard classes Fixes #23388 (cherry picked from commit 0c9fd8d48ab018739ac146420c474367c98d9ab1) - - - - - aa16159f by sheaf at 2025-08-26T18:39:32+05:30 user's guide: NamedDefaults vs ExtendedDefaultRules This commit clarifies the defaulting rules with NamedDefaults, in particular in situations where a type variable appears in other constraints than standard/unary constraints. (cherry picked from commit 2df171d40b93c666a3aa8b616a47c9acf13f7189) - - - - - 455b3a88 by Teo Camarasu at 2025-08-26T18:39:33+05:30 template-haskell: Add explicit exports lists to all remaining modules (cherry picked from commit 8eae151de9eb8f8fd0a41c1a33e25c63b1e1bb11) - - - - - 5debd4cc by sheaf at 2025-08-26T18:39:33+05:30 Don't report used duplicate record fields as unused This commit fixes the bug reported in #24035 in which the import of a duplicate record field could be erroneously reported as unused. The issue is that an import of the form "import M (fld)" can import several different 'Name's, and we should only report an error if ALL of those 'Name's are unused, not if ANY are. Note [Reporting unused imported duplicate record fields] in GHC.Rename.Names explains the solution to this problem. Fixes #24035 (cherry picked from commit 0cb1db9270e11469f11a2ccf323219e032c2a312) - - - - - 0ffd8006 by ARATA Mizuki at 2025-08-26T18:39:33+05:30 Fix code generation for SSE vector operations The new implementation generates correct code even if the registers overlap. Closes #25859 (cherry picked from commit 25850b22e76a2c23f549caff38ccd0da134051de) - - - - - 8ecaa310 by sheaf at 2025-08-26T18:39:33+05:30 Don't cache solved [W] HasCallStack constraints This commit ensures we do not add solved Wanted constraints that mention HasCallStack or HasExceptionContext constraints to the set of solved Wanted dictionary constraints: caching them is invalid, because re-using such cached dictionaries means using an old call-stack instead of constructing a new one, as was reported in #25529. Fixes #25529. (cherry picked from commit 256ac29c8df4f17a1d50ea243408d506ebf395d6) (cherry picked from commit 3b1ef0ae473c9ae52c1280f9f1577a7cbacdf5d4) - - - - - 2fb8c8fc by Zubin Duggal at 2025-08-26T18:39:33+05:30 In commit "Don't cache solved [W] HasCallStack constraints" (256ac29c8df4f17a1d50ea243408d506ebf395d6), we attempt to use `tryM` to avoid errors when looking up certain known-key names like CallStack while compiling ghc-prim and ghc-internal. Unfortunately, `tryM` doesn't catch module lookup errors. This manifests as a failure to build ghc-prim in `--make` mode on the GHC 9.10 branch. Instead, we explicitly avoid doing lookups when we are compiling ghc-prim or ghc-internal instead of relying on catching the exception. (cherry picked from commit 7492d00749488b628139d5c3bd5fa4b33cc2e4ad) (cherry picked from commit efe1efedca6633a09e6999e25231716f9870745e) - - - - - b12cbb84 by sheaf at 2025-08-26T18:39:33+05:30 LLVM: fix typo in padLiveArgs This commit fixes a serious bug in the padLiveArgs function, which was incorrectly computing too many padding registers. This caused segfaults, e.g. in the UnboxedTuples test. Fixes #25770 Fixes #25773 (cherry picked from commit 044a6e08c2aee23ef18c60a036e01d3b77168830) - - - - - f195cb7a by sheaf at 2025-08-26T18:39:33+05:30 GHC settings: always unescape escaped spaces In #25204, it was noted that GHC didn't properly deal with having spaces in its executable path, as it would compute an invalid path for the C compiler. The original fix in 31bf85ee49fe2ca0b17eaee0774e395f017a9373 used a trick: escape spaces before splitting up flags into a list. This fixed the behaviour with extra flags (e.g. -I), but forgot to also unescape for non-flags, e.g. for an executable path (such as the C compiler). This commit rectifies this oversight by consistently unescaping the spaces that were introduced in order to split up argument lists. Fixes #25204 (cherry picked from commit aa1e3b8b5c9a92592b6a49783083da37dfc69375) (cherry picked from commit cf5d5a31e3033fc2beeab8578056f096cce0eaef) - - - - - 062e7674 by Andreas Klebinger at 2025-08-26T18:39:33+05:30 NCG: AArch64 - Add -finter-module-far-jumps. When enabled the arm backend will assume jumps to targets outside of the current module are further than 128MB away. This will allow for code to work if: * The current module results in less than 128MB of code. * The whole program is loaded within a 4GB memory region. We have seen a few reports of broken linkers (#24648) where this flag might allow a program to compile/run successfully at a very small performance cost. ------------------------- Metric Increase: T783 ------------------------- (cherry picked from commit f32d6c2b468c67fed619f2fa1fb97eb012afbb6e) - - - - - 50881140 by Adam Gundry at 2025-08-26T18:39:33+05:30 user's guide: update specification of overlapping/incoherent instances The description of the instance resolution algorithm in the user's guide was slightly out of date, because it mentioned in-scope given constraints only at the end, whereas the implementation checks for their presence before any of the other steps. This also adds a warning to the user's guide about the impact of incoherent instances on specialisation, and more clearly documents some of the other effects of `-XIncoherentInstances`. (cherry picked from commit eec96527b7482fe8ee37dbab740f69804d063497) - - - - - 211717a4 by Adam Gundry at 2025-08-26T18:39:33+05:30 Fix specialisation of incoherent instances (fixes #25883) GHC normally assumes that class constraints are canonical, meaning that the specialiser is allowed to replace one dictionary argument with another provided that they have the same type. The `-fno-specialise-incoherents` flag alters INCOHERENT instance definitions so that they will prevent specialisation in some cases, by inserting `nospec`. This commit fixes a bug in 7124e4ad76d98f1fc246ada4fd7bf64413ff2f2e, which treated some INCOHERENT instance matches as if `-fno-specialise-incoherents` was in effect, thereby unnecessarily preventing specialisation. In addition it updates the relevant `Note [Rules for instance lookup]` and adds a new `Note [Canonicity for incoherent matches]`. (cherry picked from commit 6caa6508ed43a8842fc410f7125258e84cb912b9) - - - - - ce93aecf by Adam Gundry at 2025-08-26T18:39:33+05:30 Add regression test for #23429 (cherry picked from commit 0426fd6c67dba2c1695c272e1c7bfb92789453c5) - - - - - b476554e by Matthew Craven at 2025-08-26T18:39:33+05:30 Fix bytecode generation for `tagToEnum# <LITERAL>` Fixes #25975. (cherry picked from commit a00eeaec8f0b98ec2b8c4630f359fdeb3a6ce04e) (cherry picked from commit 873c0cdcd45466f5c73c0dc1544e1b6663db25ce) - - - - - e66d1c60 by Matthew Pickering at 2025-08-26T18:39:33+05:30 ghci: Use loadInterfaceForModule rather than loadSrcInterface in mkTopLevEnv loadSrcInterface takes a user given `ModuleName` and resolves it to the module which needs to be loaded (taking into account module renaming/visibility etc). loadInterfaceForModule takes a specific module and loads it. The modules in `ImpDeclSpec` have already been resolved to the actual module to get the information from during renaming. Therefore we just need to fetch the precise interface from disk (and not attempt to rename it again). Fixes #25951 (cherry picked from commit 91564dafd60445f03025c3fee4f9802e80bb09c3) - - - - - a4be8587 by Sven Tennie at 2025-08-26T18:39:33+05:30 RV64: Introduce J instruction (non-local jumps) and don't deallocate stack slots for J_TBL (#25738) J_TBL result in local jumps, there should not deallocate stack slots (see Note [extra spill slots].) J is for non-local jumps, these may need to deallocate stack slots. (cherry picked from commit 0eef99b07f80f81d463652d11bdc2282df3dcf33) - - - - - edcc66bc by Zubin Duggal at 2025-08-26T18:39:33+05:30 get-win32-tarballs.py: List tarball files to be downloaded if we cannot find them Fixes #25929 (cherry picked from commit aba2a4a5913a347f7e11623ac3e6f528cf8d8c39) - - - - - 736d19c1 by Ben Gamari at 2025-08-26T18:39:33+05:30 llvmGen: Fix linkage of built-in arrays LLVM now insists that built-in arrays use Appending linkage, not Internal. Fixes #25769. (cherry picked from commit a9d0a22c0777de18446f7f1e31ec0f575d53b290) - - - - - 8351ef1c by sheaf at 2025-08-26T18:39:33+05:30 Use mkTrAppChecked in ds_ev_typeable This change avoids violating the invariant of mkTrApp according to which the argument should not be a fully saturated function type. This ensures we don't return false negatives for type equality involving function types. Fixes #25998 (cherry picked from commit 9c6d2b1bf54310b6d9755aa2ba67fbe38feeac51) - - - - - e9beb99c by Ben Gamari at 2025-08-26T18:39:33+05:30 Reapply "Division by constants optimization" This reverts commit eb2859af981415ed6bf08fcf4d8f19811bf95494. (cherry picked from commit f0499c94071c11d31d5afc996431cf4b909dbd76) - - - - - c448d28c by Ben Gamari at 2025-08-26T18:39:33+05:30 rts/linker: Don't fail due to RTLD_NOW In !12264 we started using the NativeObj machinery introduced some time ago for loading of shared objects. One of the side-effects of this change is shared objects are now loaded eagerly (i.e. with `RTLD_NOW`). This is needed by NativeObj to ensure full visibility of the mappings of the loaded object, which is in turn needed for safe shared object unloading. Unfortunately, this change subtly regressed, causing compilation failures in some programs. Specifically, shared objects which refer to undefined symbols (e.g. which may be usually provided by either the executable image or libraries loaded via `dlopen`) will fail to load with eager binding. This is problematic as GHC loads all package dependencies while, e.g., evaluating TemplateHaskell splices. This results in compilation failures in programs depending upon (but not using at compile-time) packages with undefined symbol references. To mitigate this NativeObj now first attempts to load an object via eager binding, reverting to lazy binding (and disabling unloading) on failure. See Note [Don't fail due to RTLD_NOW]. Fixes #25943. (cherry picked from commit 715d2a8550418d342bea767e1a4b0c7695966463) (cherry picked from commit a9de3b73ebb6f29eeae7d170a0210f5bedeb8d85) - - - - - d0b59bb8 by Ben Gamari at 2025-08-26T18:39:33+05:30 rts/linker: Factor out ProddableBlocks machinery (cherry picked from commit 2921131cfa185c8e0ec48ddce2c994615493ca0a) (cherry picked from commit 7d7e096504cd35272df9727b92dcbe7d94927ac8) - - - - - 82d67861 by Ben Gamari at 2025-08-26T18:39:33+05:30 rts/linker: Improve efficiency of proddable blocks structure Previously the linker's "proddable blocks" check relied on a simple linked list of spans. This resulted in extremely poor complexity while linking objects with lots of small sections (e.g. objects built with split sections). Rework the mechanism to instead use a simple interval set implemented via binary search. Fixes #26009. (cherry picked from commit e6e69dba996f47e21391f023010f5b138dc1df9c) (cherry picked from commit b388ca86b5e56636a1862987ec1b1d3deefedc9e) - - - - - 5b1c779d by Ben Gamari at 2025-08-26T18:39:33+05:30 testsuite: Add simple functional test for ProddableBlockSet (cherry picked from commit 915902fc09ff4b00cf676c40d31dbbbf7d1cb7d7) (cherry picked from commit dc4c540ddd39fb99b18630aebd2849ac29a4cd73) - - - - - f6f04976 by Ben Gamari at 2025-08-26T18:39:33+05:30 rts/linker/PEi386: Drop check for LOAD_LIBRARY_SEARCH_*_DIRS The `LOAD_LIBRARY_SEARCH_USER_DIRS` and `LOAD_LIBRARY_SEARCH_DEFAULT_DIRS` were introduced in Windows Vista and have been available every since. As we no longer support Windows XP we can drop this check. Addresses #26009. (cherry picked from commit 1f38e2739fbbae3cbe925320fa70965004aaaca5) (cherry picked from commit 10cfa8946b76a914fb3ecd4df62d32160b64151a) - - - - - bc9b6d9e by Ben Gamari at 2025-08-26T18:39:33+05:30 rts/linker/PEi386: Clean up code style (cherry picked from commit facf379b0f1c0d1cbc3c1896cce603c89e837481) (cherry picked from commit 92793b3799525f46373d9696c7e91c0d14860fa8) - - - - - 22c32fb6 by Ben Gamari at 2025-08-26T18:39:33+05:30 rts/Hash: Factor out hashBuffer This is a useful helper which can be used for non-strings as well. (cherry picked from commit 827961b9a724d8b2dd848222f980efc2de3996e3) (cherry picked from commit a8c1ecb0d45050491496c0d04cc022a294a075b1) - - - - - bb27c52e by Ben Gamari at 2025-08-26T18:39:33+05:30 rts/linker/PEi386: Fix incorrect use of break in nested for Previously the happy path of PEi386 used `break` in a double-`for` loop resulting in redundant calls to `LoadLibraryEx`. Fixes #26052. (cherry picked from commit 6fbb05cf8a999628476d0d7274f30ef45e4d3932) (cherry picked from commit 36a8bd2b7ceb0622e0aca2bed9cee7162076379c) - - - - - ffeb2251 by Ben Gamari at 2025-08-26T18:39:33+05:30 rts: Correctly mark const arguments (cherry picked from commit 320d7dd3e8de62f970d23ac1d27c665093d22aaa) (cherry picked from commit 3a389cacefaffb3293f6b5f2ed5b20f2dbb9b4e3) - - - - - 8722b65a by Ben Gamari at 2025-08-26T18:39:33+05:30 rts/linker/PEi386: Don't repeatedly load DLLs Previously every DLL-imported symbol would result in a call to `LoadLibraryEx`. This ended up constituting over 40% of the runtime of `ghc --interactive -e 42` on Windows. Avoid this by maintaining a hash-set of loaded DLL names, skipping the call if we have already loaded the requested DLL. Addresses #26009. (cherry picked from commit e6b0067bfa49b42bf4599af8d6a3c97878302624) (cherry picked from commit b24be9b90adcf3fb9ee0c6b7e120b4bf1e77f072) - - - - - 01f31122 by Ben Gamari at 2025-08-26T18:39:33+05:30 rts/linker: Expand comment describing ProddableBlockSet (cherry picked from commit 9631a12c0b89529c3d1147d0770ec6b9023cdb17) (cherry picked from commit 6ad664de0a4ab3e1747d318aabb5035ce7c74fcd) - - - - - c7a4d081 by Cheng Shao at 2025-08-26T18:39:33+05:30 rts: fix rts_clearMemory logic when sanity checks are enabled This commit fixes an RTS assertion failure when invoking rts_clearMemory with +RTS -DS. -DS implies -DZ which asserts that free blocks contain 0xaa as the designated garbage value. Also adds the sanity way to rts_clearMemory test to prevent future regression. Closes #26011. ChatGPT Codex automatically diagnosed the issue and proposed the initial patch in a single shot, given a GHC checkout and the following prompt: --- Someone is reporting the following error when attempting to use `rts_clearMemory` with the RTS option `-DS`: ``` test.wasm: internal error: ASSERTION FAILED: file rts/sm/Storage.c, line 1216 (GHC version 9.12.2.20250327 for wasm32_unknown_wasi) Please report this as a GHC bug: https://www.haskell.org/ghc/reportabug ``` What's the culprit? How do I look into this issue? --- I manually reviewed & revised the patch, tested and submitted it. (cherry picked from commit 86406f48659a5ab61ce1fd2a2d427faba2dcdb09) - - - - - 68de18b0 by kwxm at 2025-08-26T18:39:33+05:30 Fix bugs in `integerRecipMod` and `integerPowMod` This fixes #26017. * `integerRecipMod x 1` now returns `(# 1 | #)` for all x; previously it incorrectly returned `(# | () #)`, indicating failure. * `integerPowMod 0 e m` now returns `(# | () #)` for e<0 and m>1, indicating failure; previously it incorrectly returned `(# 0 | #)`. (cherry picked from commit 8ded23300367c6e032b3c5a635fd506b8915374b) - - - - - fc9e23c2 by Matthew Pickering at 2025-08-26T18:39:33+05:30 interpreter: Fix INTERP_STATS profiling code The profiling code had slightly bitrotted since the last time it was used. This just fixes things so that if you toggle the INTERP_STATS macro then it just works and prints out the stats. Fixes #25695 (cherry picked from commit 66c7f65676801367f440a6a644f87d71157d2f3f) - - - - - 710a21b9 by Matthew Pickering at 2025-08-26T18:39:34+05:30 interpreter: Fix overflows and reentrancy in statistics calculation 1. Use unsigned long for counter, as they can easily overflow if you are running a long benchmark. 2. Make interp_shutdown reentrant by copying the command frequency table into an array. Fixes #25756 (cherry picked from commit c4e112fccd10ca745771dd81d2c1eb340aa8dd86) - - - - - 924cd8c3 by Ben Gamari at 2025-08-26T18:39:34+05:30 rts: Tighten up invariants of PACK (cherry picked from commit aa58fc5b9745a2201707de81a91960b213ea3258) - - - - - 58861b3c by Ben Gamari at 2025-08-26T18:39:34+05:30 rts: Improve documentation of SLIDE bytecode instruction (cherry picked from commit 0e084029def86e9e67b89317f44fd71c823e9bca) - - - - - 413c5d67 by Ben Gamari at 2025-08-26T18:39:34+05:30 rts/Interpreter: Assert that TEST*_P discriminators are valid (cherry picked from commit 9bf3663b9970851e7b5701d68147450272823197) - - - - - ff953f25 by Ben Gamari at 2025-08-26T18:39:34+05:30 Revert "rts/Interpreter: Assert that TEST*_P discriminators are valid" This assertion was based on the misconception that `GET_TAG` was returning the pointer tag whereas it is actually returning the constructor tag. This reverts commit 9bf3663b9970851e7b5701d68147450272823197. Fixes #25527. (cherry picked from commit dd95940639fd198f97fb3f44e84494eaca721788) - - - - - 5400f73c by Matthew Pickering at 2025-08-26T18:39:34+05:30 interpreter: Fix underflow frame lookups BCOs can be nested, resulting in nested BCO stack frames where the inner most stack frame can refer to variables stored on earlier stack frames via the PUSH_L instruction. |---------| | BCO_1 | -<-┐ |---------| ......... | |---------| | PUSH_L <n> | BCO_N | ->-┘ |---------| Here BCO_N is syntactically nested within the code for BCO_1 and will result in code that references the prior stack frame of BCO_1 for some of it's local variables. If a stack overflow happens between the creation of the stack frame for BCO_1 and BCO_N the RTS might move BCO_N to a new stack chunk while leaving BCO_1 in place, invalidating a simple offset based reference to the outer stack frames. Therefore `ReadSpW` first performs a bounds check to ensure that accesses onto the stack will succeed. If the target address would not be a valid location for the current stack chunk then `slow_spw` function is called, which dereferences the underflow frame to adjust the offset before performing the lookup. ┌->--x | CHK_1 | | CHK_2 | | | |---------| |---------| | └-> | BCO_1 | | UD_FLOW | -- x |---------| |---------| | | ...... | | |---------| | PUSH_L <n> | BCO_ N | ->-┘ |---------| Fixes #25750 (cherry picked from commit f4da90f11e3a3a634ec3edb6d70d96fe3515b726) - - - - - 677d4a11 by Ben Gamari at 2025-08-26T18:39:34+05:30 base: Note strictness changes made in 4.16.0.0 Addresses #25886. (cherry picked from commit 7722232c6f8f0b57db03d0439d77896d38191bf9) - - - - - 0498c031 by Hécate Kleidukos at 2025-08-26T18:39:34+05:30 Expose all of Backtraces' internals for ghc-internal Closes #26049 (cherry picked from commit 16014bf84afa0d009b6254b103033bceca42233a) - - - - - 57007100 by ARATA Mizuki at 2025-08-26T18:39:34+05:30 AArch64 NCG: Fix sub-word arithmetic right shift As noted in Note [Signed arithmetic on AArch64], we should zero-extend sub-word values. Fixes #26061 (cherry picked from commit 265d0024abc95be941f8e4769f24af128eedaa10) - - - - - 91cd0f60 by ARATA Mizuki at 2025-08-26T18:39:34+05:30 x86 NCG: Fix code generation of bswap64 on i386 Co-authored-by: sheaf <sam.derbyshire@gmail.com> Fix #25601 (cherry picked from commit bfa6b70f27dc2ce7fc890ec71103c40f66497c77) - - - - - 53d3e383 by Cheng Shao at 2025-08-26T18:39:34+05:30 testsuite: add T26120 marked as broken (cherry picked from commit 44b8cee2d5c114b238898ce4ee7b44ecaa0bf491) - - - - - 520b71e9 by Cheng Shao at 2025-08-26T18:39:34+05:30 compiler: fix GHC.SysTools.Ar archive member size writing logic This patch fixes a long-standing bug in `GHC.SysTools.Ar` that emits the wrong archive member size in each archive header. It should encode the exact length of the member payload, excluding any padding byte, otherwise malformed archive that extracts a broken object with an extra trailing byte could be created. Apart from the in-tree `T26120` test, I've also created an out-of-tree testsuite at https://github.com/TerrorJack/ghc-ar-quickcheck that contains QuickCheck roundtrip tests for `GHC.SysTools.Ar`. With this fix, simple roundtrip tests and `writeGNUAr`/GNU `ar` roundtrip test passes. There might be more bugs lurking in here, but this patch is still a critical bugfix already. Fixes #26120 #22586. Co-authored-by: Codex <codex@openai.com> (cherry picked from commit 894a04f3a82dd39ecef71619e2032c4dfead556e) - - - - - 3eb592c3 by Berk Özkütük at 2025-08-26T18:39:34+05:30 Consider `PromotedDataCon` in `tyConStupidTheta` Haddock checks data declarations for the stupid theta so as not to pretty-print them as empty contexts. Type data declarations end up as `PromotedDataCon`s by the time Haddock performs this check, causing a panic. This commit extends `tyConStupidTheta` so that it returns an empty list for `PromotedDataCon`s. This decision was guided by the fact that type data declarations never have data type contexts (see (R1) in Note [Type data declarations]). Fixes #25739. (cherry picked from commit 8d33d048dbe159a045a4c304fa92318365a3dfe2) - - - - - 24c14890 by Teo Camarasu at 2025-08-26T18:39:34+05:30 rts/nonmovingGC: remove n_free We remove the nonmovingHeap.n_free variable. We wanted this to track the length of nonmovingHeap.free. But this isn't possible to do atomically. When this isn't accurate we can get a segfault by going past the end of the list. Instead, we just count the length of the list when we grab it in nonmovingPruneFreeSegment. Resolves #26186 (cherry picked from commit 45efaf71d97355f76fe0db5af2fc5b4b67fddf47) - - - - - d5a385cd by Andreas Klebinger at 2025-08-26T18:39:34+05:30 Disable -fprof-late-overloaded-calls for join points. Currently GHC considers cost centres as destructive to join contexts. Or in other words this is not considered valid: join f x = ... in ... -> scc<tick> jmp This makes the functionality of `-fprof-late-overloaded-calls` not feasible for join points in general. We used to try to work around this by putting the ticks on the rhs of the join point rather than around the jump. However beyond the loss of accuracy this was broken for recursive join points as we ended up with something like: rec-join f x = scc<tick> ... jmp f x Which similarly is not valid as the tick once again destroys the tail call. One might think we could limit ourselves to non-recursive tail calls and do something clever like: join f x = scc<tick> ... in ... jmp f x And sometimes this works! But sometimes the full rhs would look something like: join g x = .... join f x = scc<tick> ... -> jmp g x Which, would again no longer be valid. I believe in the long run we can make cost centre ticks non-destructive to join points. Or we could keep track of where we are/are not allowed to insert a cost centre. But in the short term I will simply disable the annotation of join calls under this flag. (cherry picked from commit 7da86e165612721c4e09f772a3fdaffc733e9293) - - - - - 2e401cf2 by Zubin Duggal at 2025-08-26T18:39:34+05:30 fetch_gitlab: Ensure we copy users_guide.pdf and Haddock.pdf to the release docs directory Fixes #24093 (cherry picked from commit 9fa590a6e27545995cdcf419ed7a6504e6668b18) - - - - - cd8e897a by Sebastian Graf at 2025-08-26T18:39:34+05:30 CprAnal: Detect recursive newtypes (#25944) While `cprTransformDataConWork` handles recursive data con workers, it did not detect the case when a newtype is responsible for the recursion. This is now detected in the `Cast` case of `cprAnal`. The same reproducer made it clear that `isRecDataCon` lacked congruent handling for `AppTy` and `CastTy`, now fixed. Furthermore, the new repro case T25944 triggered this bug via an infinite loop in `cprFix`, caused by the infelicity in `isRecDataCon`. While it should be much less likely to trigger such an infinite loop now that `isRecDataCon` has been fixed, I made sure to abort the loop after 10 iterations and emitting a warning instead. Fixes #25944. (cherry picked from commit 4bc78496406f7469640faaa46e2f311c05760124) - - - - - 79df5ca0 by Ben Gamari at 2025-08-26T18:39:34+05:30 configure: Allow override of CrossCompiling As noted in #26236, the current inference logic is a bit simplistic. In particular, there are many cases (e.g. building for a new libc) where the target and host triples may differ yet we are still able to run the produced artifacts as native code. Closes #26236. (cherry picked from commit 81577fe7c1913c53608bf03e48f84507be904620) - - - - - b2d8adfa by Simon Peyton Jones at 2025-08-26T18:39:34+05:30 Take more care in zonkEqTypes on AppTy/AppTy This patch fixes #26256. See Note [zonkEqTypes and the PKTI] in GHC.Tc.Solver.Equality (cherry picked from commit 18036d5205ac648bb245217519fed2fd931a9982) - - - - - d16959af by Andreas Klebinger at 2025-08-26T18:39:34+05:30 Make unexpected LLVM versions a warning rather than an error. Typically a newer LLVM version *will* work so erroring out if a user uses a newer LLVM version is too aggressive. Fixes #25915 (cherry picked from commit 50842f83f467ff54dd22470559a7af79d2025c03) - - - - - b1035b0a by Teo Camarasu at 2025-08-26T18:39:34+05:30 rts: spin if we see a WHITEHOLE in messageBlackHole When a BLACKHOLE gets cancelled in raiseAsync, we indirect to a THUNK. GC can then shortcut this, replacing our BLACKHOLE with a fresh THUNK. This THUNK is not guaranteed to have a valid indirectee field. If at the same time, a message intended for the previous BLACKHOLE is processed and concurrently we BLACKHOLE the THUNK, thus temporarily turning it into a WHITEHOLE, we can get a segfault, since we look at the undefined indirectee field of the THUNK The fix is simple: spin if we see a WHITEHOLE, and it will soon be replaced with a valid BLACKHOLE. Resolves #26205 (cherry picked from commit 4021181ee0860aca2054883a531f3312361cc701) - - - - - 3c50050b by Teo Camarasu at 2025-08-26T18:39:34+05:30 rts: ensure MessageBlackHole.link is always a valid closure We turn a MessageBlackHole into an StgInd in wakeBlockingQueue(). Therefore it's important that the link field, which becomes the indirection field, always points to a valid closure. It's unclear whether it's currently possible for the previous behaviour to lead to a crash, but it's good to be consistent about this invariant nonetheless. Co-authored-by: Andreas Klebinger <klebinger.andreas@gmx.at> (cherry picked from commit a8b2fbae6bcf20bc2f3fe58803096d2a9c5fc43d) - - - - - e0f29f58 by Reed Mullanix at 2025-08-26T18:39:34+05:30 ghc-internal: Fix naturalAndNot for NB/NS case When the first argument to `naturalAndNot` is larger than a `Word` and the second is `Word`-sized, `naturalAndNot` will truncate the result: ```
naturalAndNot ((2 ^ 65) .|. (2 ^ 3)) (2 ^ 3) 0
In contrast, `naturalAndNot` does not truncate when both arguments are larger than a `Word`, so this appears to be a bug.
Luckily, the fix is pretty easy: we just need to call `bigNatAndNotWord#` instead of truncating.
Fixes #26230
(cherry picked from commit a766286fe759251eceb304c54ba52841c2a51f86)
- - - - -
190 changed files:
- .gitlab/rel_eng/fetch-gitlab-artifacts/fetch_gitlab.py
- compiler/GHC/Builtin/Names.hs
- compiler/GHC/ByteCode/Instr.hs
- compiler/GHC/Cmm/Config.hs
- compiler/GHC/Cmm/MachOp.hs
- compiler/GHC/Cmm/Opt.hs
- compiler/GHC/Cmm/Pipeline.hs
- compiler/GHC/Cmm/Sink.hs
- compiler/GHC/CmmToAsm/AArch64/CodeGen.hs
- compiler/GHC/CmmToAsm/Config.hs
- compiler/GHC/CmmToAsm/RV64/CodeGen.hs
- compiler/GHC/CmmToAsm/RV64/Instr.hs
- compiler/GHC/CmmToAsm/RV64/Ppr.hs
- compiler/GHC/CmmToAsm/X86/CodeGen.hs
- compiler/GHC/CmmToLlvm/Base.hs
- compiler/GHC/CmmToLlvm/Data.hs
- compiler/GHC/Core/DataCon.hs
- compiler/GHC/Core/InstEnv.hs
- compiler/GHC/Core/LateCC/OverloadedCalls.hs
- compiler/GHC/Core/Opt/CprAnal.hs
- compiler/GHC/Core/Opt/WorkWrap/Utils.hs
- compiler/GHC/Core/Predicate.hs
- compiler/GHC/Core/TyCon.hs
- compiler/GHC/Driver/Config/Cmm.hs
- compiler/GHC/Driver/Config/CmmToAsm.hs
- compiler/GHC/Driver/DynFlags.hs
- compiler/GHC/Driver/Errors/Ppr.hs
- compiler/GHC/Driver/Flags.hs
- compiler/GHC/Driver/Pipeline/Execute.hs
- compiler/GHC/Driver/Session.hs
- compiler/GHC/Hs/ImpExp.hs
- compiler/GHC/HsToCore/Binds.hs
- compiler/GHC/Rename/Names.hs
- compiler/GHC/Runtime/Eval.hs
- compiler/GHC/Settings/IO.hs
- compiler/GHC/StgToByteCode.hs
- compiler/GHC/StgToCmm/Prim.hs
- compiler/GHC/SysTools/Ar.hs
- compiler/GHC/SysTools/Process.hs
- compiler/GHC/Tc/Solver/Dict.hs
- compiler/GHC/Tc/Solver/Equality.hs
- compiler/GHC/Tc/Solver/Monad.hs
- compiler/GHC/Tc/Solver/Types.hs
- compiler/GHC/Tc/TyCl.hs
- compiler/GHC/Types/Id/Make.hs
- configure.ac
- docs/users_guide/exts/instances.rst
- docs/users_guide/exts/named_defaults.rst
- docs/users_guide/exts/overloaded_strings.rst
- docs/users_guide/exts/poly_kinds.rst
- + docs/users_guide/exts/type_defaulting.rst
- docs/users_guide/exts/types.rst
- docs/users_guide/ghci.rst
- docs/users_guide/profiling.rst
- docs/users_guide/using-optimisation.rst
- libraries/base/changelog.md
- libraries/ghc-bignum/changelog.md
- libraries/ghc-bignum/src/GHC/Num/Integer.hs
- libraries/ghc-bignum/src/GHC/Num/Natural.hs
- libraries/ghc-internal/src/GHC/Internal/Exception/Backtrace.hs
- libraries/template-haskell/Language/Haskell/TH/Ppr.hs
- libraries/template-haskell/Language/Haskell/TH/PprLib.hs
- libraries/template-haskell/Language/Haskell/TH/Syntax.hs
- m4/fp_setup_windows_toolchain.m4
- rts/Hash.c
- rts/Hash.h
- rts/Interpreter.c
- rts/Interpreter.h
- rts/Linker.c
- rts/LinkerInternals.h
- rts/Messages.c
- rts/PathUtils.c
- rts/PathUtils.h
- rts/RtsMain.c
- rts/StgMiscClosures.cmm
- rts/Updates.h
- rts/include/rts/storage/InfoTables.h
- rts/linker/Elf.c
- rts/linker/LoadNativeObjPosix.c
- rts/linker/MachO.c
- rts/linker/PEi386.c
- rts/linker/PEi386.h
- + rts/linker/ProddableBlocks.c
- + rts/linker/ProddableBlocks.h
- rts/rts.cabal
- rts/sm/NonMoving.c
- rts/sm/NonMoving.h
- rts/sm/NonMovingAllocate.c
- rts/sm/Sanity.c
- rts/sm/Storage.h
- + testsuite/tests/bytecode/T25975.hs
- + testsuite/tests/bytecode/T25975.stdout
- testsuite/tests/bytecode/all.T
- + testsuite/tests/cmm/should_run/T25601.hs
- + testsuite/tests/cmm/should_run/T25601.stdout
- + testsuite/tests/cmm/should_run/T25601a.cmm
- testsuite/tests/cmm/should_run/all.T
- + testsuite/tests/codeGen/should_run/T26061.hs
- + testsuite/tests/codeGen/should_run/T26061.stdout
- testsuite/tests/codeGen/should_run/all.T
- + testsuite/tests/cpranal/sigs/T25944.hs
- + testsuite/tests/cpranal/sigs/T25944.stderr
- testsuite/tests/cpranal/sigs/all.T
- testsuite/tests/deriving/should_compile/T17324.stderr
- testsuite/tests/ffi/should_run/all.T
- + testsuite/tests/ghc-api/T26120.hs
- + testsuite/tests/ghc-api/T26120.stdout
- testsuite/tests/ghc-api/all.T
- testsuite/tests/ghc-api/settings-escape/T11938.hs → testsuite/tests/ghc-api/settings-escape/T24265.hs
- testsuite/tests/ghc-api/settings-escape/T11938.stderr → testsuite/tests/ghc-api/settings-escape/T24265.stderr
- + testsuite/tests/ghc-api/settings-escape/T25204.hs
- + testsuite/tests/ghc-api/settings-escape/T25204.stdout
- + testsuite/tests/ghc-api/settings-escape/T25204_C.c
- testsuite/tests/ghc-api/settings-escape/all.T
- + testsuite/tests/ghc-api/settings-escape/ghc-install-folder/ghc version.h
- testsuite/tests/ghc-api/settings-escape/ghc-install-folder/lib/.gitkeep → testsuite/tests/ghc-api/settings-escape/ghc-install-folder/lib with spaces/.gitkeep
- + testsuite/tests/ghci/scripts/GhciPackageRename.hs
- + testsuite/tests/ghci/scripts/GhciPackageRename.script
- + testsuite/tests/ghci/scripts/GhciPackageRename.stdout
- testsuite/tests/ghci/scripts/all.T
- + testsuite/tests/lib/integer/T26017.hs
- + testsuite/tests/lib/integer/T26017.stdout
- testsuite/tests/lib/integer/all.T
- testsuite/tests/lib/integer/integerRecipMod.hs
- testsuite/tests/lib/integer/integerRecipMod.stdout
- + testsuite/tests/llvm/should_run/T25770.hs
- + testsuite/tests/llvm/should_run/T25770.stdout
- testsuite/tests/llvm/should_run/all.T
- testsuite/tests/module/T11970A.stderr
- testsuite/tests/module/mod176.stderr
- + testsuite/tests/numeric/should_run/T26230.hs
- + testsuite/tests/numeric/should_run/T26230.stdout
- testsuite/tests/numeric/should_run/all.T
- testsuite/tests/overloadedrecflds/should_fail/overloadedrecfldsfail06.stderr
- + testsuite/tests/partial-sigs/should_compile/T26256.hs
- + testsuite/tests/partial-sigs/should_compile/T26256.stderr
- testsuite/tests/partial-sigs/should_compile/all.T
- testsuite/tests/plugins/plugins10.stdout
- testsuite/tests/plugins/static-plugins.stdout
- testsuite/tests/rename/should_compile/T14881.stderr
- + testsuite/tests/rename/should_compile/T24035.hs
- + testsuite/tests/rename/should_compile/T24035_aux.hs
- + testsuite/tests/rename/should_compile/T24035b.hs
- + testsuite/tests/rename/should_compile/T24035b.stderr
- testsuite/tests/rename/should_compile/all.T
- testsuite/tests/rts/T13082/Makefile
- testsuite/tests/rts/T13082/T13082_fail.stderr → testsuite/tests/rts/T13082/T13082_fail.stdout
- + testsuite/tests/rts/TestProddableBlockSet.c
- testsuite/tests/rts/all.T
- testsuite/tests/simd/should_run/all.T
- + testsuite/tests/simd/should_run/doublex2_arith.hs
- + testsuite/tests/simd/should_run/doublex2_arith.stdout
- + testsuite/tests/simd/should_run/doublex2_arith_baseline.hs
- + testsuite/tests/simd/should_run/doublex2_arith_baseline.stdout
- + testsuite/tests/simd/should_run/doublex2_fma.hs
- + testsuite/tests/simd/should_run/doublex2_fma.stdout
- + testsuite/tests/simd/should_run/floatx4_arith.hs
- + testsuite/tests/simd/should_run/floatx4_arith.stdout
- + testsuite/tests/simd/should_run/floatx4_arith_baseline.hs
- + testsuite/tests/simd/should_run/floatx4_arith_baseline.stdout
- + testsuite/tests/simd/should_run/floatx4_fma.hs
- + testsuite/tests/simd/should_run/floatx4_fma.stdout
- + testsuite/tests/simplCore/should_compile/T25883.hs
- + testsuite/tests/simplCore/should_compile/T25883.substr-simpl
- + testsuite/tests/simplCore/should_compile/T25883b.hs
- + testsuite/tests/simplCore/should_compile/T25883b.substr-simpl
- + testsuite/tests/simplCore/should_compile/T25883c.hs
- + testsuite/tests/simplCore/should_compile/T25883c.substr-simpl
- + testsuite/tests/simplCore/should_compile/T25883d.hs
- + testsuite/tests/simplCore/should_compile/T25883d.stderr
- + testsuite/tests/simplCore/should_compile/T25883d_import.hs
- testsuite/tests/simplCore/should_compile/all.T
- + testsuite/tests/simplCore/should_fail/T25672.hs
- + testsuite/tests/simplCore/should_fail/T25672.stderr
- testsuite/tests/simplCore/should_fail/all.T
- + testsuite/tests/simplCore/should_run/T23429.hs
- + testsuite/tests/simplCore/should_run/T23429.stdout
- testsuite/tests/simplCore/should_run/all.T
- + testsuite/tests/typecheck/should_compile/T26256a.hs
- testsuite/tests/typecheck/should_compile/all.T
- + testsuite/tests/typecheck/should_run/T25529.hs
- + testsuite/tests/typecheck/should_run/T25529.stdout
- + testsuite/tests/typecheck/should_run/T25998.hs
- + testsuite/tests/typecheck/should_run/T25998.stdout
- testsuite/tests/typecheck/should_run/all.T
- + utils/haddock/html-test/ref/Bug25739.html
- utils/haddock/html-test/ref/QuasiExpr.html
- utils/haddock/html-test/ref/TH.html
- utils/haddock/html-test/ref/Threaded_TH.html
- + utils/haddock/html-test/src/Bug25739.hs
The diff was not included because it is too large.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/2d9f0d27171c06e11f5bc6d9de88736659a68859...e0f29f58b571c16d5df089a7f32767bc654512a4
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/2d9f0d27171c06e11f5bc6d9de88736659a68859...e0f29f58b571c16d5df089a7f32767bc654512a4
You're receiving this email because of your account on gitlab.haskell.org.
participants (1)
-
Zubin (@wz1000)